bas*_*rat 5 javascript momentjs
Moment js具有获取一个月内天数的功能:http://momentjs.com/docs/#/displaying/days-in-month/
但是我找不到一个函数来查找一年中的iso周数(52或53).
bas*_*rat 11
在一年的最后一天使用isoWeek获取周数,例如:
function weeksInYear(year) {
return Math.max(
moment(new Date(year, 11, 31)).isoWeek()
, moment(new Date(year, 11, 31-7)).isoWeek()
);
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*obG 11
这是一个不依赖于库的答案.它使用一个函数来计算12月31日所需年份的一周中的一周.如果周是1(即12月31日是下一年的第一周),它会将日数降低,直到获得不同的值,这将是所需年份的最后一周.
另一种方法是检查返回的年份是否相同并减少日期数量,直到它为止.
function getWeekNumber(d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(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;
}
alert(weeksInYear(2015)); // 53
Run Code Online (Sandbox Code Playgroud)
该getWeekNumber代码是从这里:获得今年的JavaScript的一周像PHP.
根据Scott的建议,这里有一个没有do循环的东西,所以如果12月31日是在第二年它将在12月24日获得一周.
function weeksInYear(year) {
var d = new Date(year, 11, 31);
var week = getWeekNumber(d)[1];
return week == 1? getWeekNumber(d.setDate(24))[1] : week;
}
Run Code Online (Sandbox Code Playgroud)
作为测试,2013-12-31在2014年第1周,并weeksInYear(2013)返回52.