以下是计算周日期的代码,
//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日即星期一开始 但上面的代码没有正确计算。
答案 0 :(得分:2)
我建议您查看ISO Calendar plugin到moment.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天,没有任何问题。显然结果仍然准确,但它们可能会给那些在日历方面思考的人带来令人困惑的结果。