在javascript中获取一年,周数和日期的第一个星期日期

时间:2012-08-09 19:31:33

标签: javascript

以下是计算周日期的代码,

//Gets the week dayNumber date against the year,week number
var getWeekDate = function (year, weekNumber, dayNumber) {

var date = new Date(year, 0, 10, 0, 0, 0),
    day = new Date(year, 0, 4, 0, 0, 0),
    month = day.getTime() - date.getDay() * 86400000;
return new Date(month + ((weekNumber - 1) * 7 + dayNumber) * 86400000);
};

如果我提供以下值,代码工作正常,

输入:
年= 2012年 weekNumber = 1
dayNumber = 0 //我的星期从星期一开始,所以我给它0。

输出:
2012年1月2日//这是正确的。

输入:
年= 2013年 weekNumber = 1
dayNumber = 0 //我的星期从星期一开始,所以我给它0。

输出:
2012年12月31日//这是正确的。

2013年第一周将从2013年1月7日即星期一开始 但上面的代码没有正确计算。

2 个答案:

答案 0 :(得分:2)

我建议您查看ISO Calendar pluginmoment.js

答案 1 :(得分:1)

这实际上是准确的,因为2013年第1周的第0天(星期一)仍然是2012年的一部分。您可以使用条件来检查该周的请求日是否属于该年的一部分。

//Gets the week dayNumber date against the year,week number
var getWeekDate = function (year, weekNumber, dayNumber) {

var date = new Date(year, 0, 10, 0, 0, 0),
    day = new Date(year, 0, 4, 0, 0, 0),
    month = day.getTime() - date.getDay() * 86400000,
    ans = new Date(month + ((weekNumber - 1) * 7 + dayNumber) * 86400000);
if (weekNumber === 1 && ans.getMonth() !== 0) {
    // We're still in last year... handle appropriately
}
return ans;
};

顺便说一句,将一些变量检查放在适当位置并不是一个坏主意。我可以输入第0周,第55周和第92天,没有任何问题。显然结果仍然准确,但它们可能会给那些在日历方面思考的人带来令人困惑的结果。