function getWeekNumber(d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(0, 0, 0, 0);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
// Get first day of year
var yearStart = new Date(d.getFullYear(), 0, 1);
// Calculate full weeks to nearest Thursday
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
// Return array of year and week number
return [d.getFullYear(), weekNo];
}
function weeksInYear(year) {
var month = 11,
day = 31,
week;
// Find week that 31 Dec is in. If is first week, reduce date until
// get previous week.
do {
d = new Date(year, month, day--);
week = getWeekNumber(d)[1];
} while (week == 1);
return week;
}
[2015, 2016, 2029, new Date().getFullYear()].forEach(year =>
console.log(`${year} has ${weeksInYear(year)} weeks`)
);
5条答案
按热度按时间ruarlubt1#
这里有一个不依赖于库的答案,它使用一个函数来计算12月31日在所需年份中的星期,如果星期是1(即12月31日是下一年的第一周),它会将日期编号向下移动,直到得到一个不同的值,这将是所需年份的最后一周。
编辑
或者,如果12月31日在下一年的第1周,则主题年为52周,否则为53周。
zwghvu4y2#
在一年的最后一天使用isoWeek以获得周数,例如:
sigwle7e3#
Feb. 4th 2014将weeksInYear和isoWeeksInYear函数添加到moment.js中
今天你可以用
moment().isoWeeksInYear()
或者moment().weeksInYear()
有关详细信息,请参阅文档
xam8gpfp4#
我想我会发布一个简单得多的版本,我从维基百科的文章。
文章中的表述是:
“某一年的周数等于12月28日的相应周数,因为它是唯一一个总是在该年最后一周的日期,因为它是1月4日之前的一周,而1月4日总是在下一年的第一周。
仅使用序数y,该年的周数可由函数确定,该函数返回12月31日是星期几。
因此,
getWeekFor(new Date(2022, 11, 28)
将year替换为您想要的任何年份,将始终为您提供该年份的周数。0sgqnhkj5#
获取一年中该周的所有周和时段,供可能感兴趣的人使用