1

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

//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);
};

如果我给出以下值,代码工作正常,

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

输出:
2012 年 1 月 2 日 //没错。

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

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

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

4

2 回答 2

2

我建议查看moment.jsISO 日历插件

于 2012-08-09T19:38:10.613 回答
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 天。显然,结果仍然是准确的,但它们可能会给那些考虑日历的人带来令人困惑的结果。

于 2012-08-09T20:03:27.293 回答