如果那个星期恰好是连续两个月,我需要知道一周的确切月份。例如,2016年第52周是2016年12月和2017年1月。2017年1月30日至2017年2月5日,2017年第5周开始。
因此,如果给出一年中的一周数,我可以得到它所涉及的月份。我需要知道是否有任何JS库可以轻松实现这一目标。
我知道我可以从特定的日期值获得一个星期的数字,但是还没有找到一种方法来获取日期范围内的日期范围,以便我可以从那里获得月份 .If momentJS或任何其他lib都可以做到这一点,我怎样才能用它来实现这个目标?
提前致谢
答案 0 :(得分:3)
我们想要为给定周和结束的开头创建一个日期对象。
momentjs是一个很好的库,可以更轻松地使用日期对象。
var moment = require('moment');
function getMonths(weekNumber) {
var beginningOfWeek = moment().week(weekNumber).startOf('week');
var endOfWeek = moment().week(weekNumber).startOf('week').add(6, 'days');
console.log(beginningOfWeek.format('MMMM'));
console.log(endOfWeek.format('MMMM'));
}
考虑到一周的数字,我们正在创建一个时刻对象,并在六天后创建另一个。然后我们在一周的开始和结束时记录月份。
以下是一个例子:
getMonths(5);
一月
二月
答案 1 :(得分:2)
您可以通过添加更多6天轻松获得周结束日期
function getDateOfISOWeek(w, y) {
var simple = new Date(y, 0, 1 + (w - 1) * 7);
var dow = simple.getDay();
var ISOweekStart = simple;
if (dow <= 4)
ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
else
ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
return ISOweekStart;
}
function getDateRangeOfWeek(w, y) {
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var date = getDateOfISOWeek(w, y);
var monthStart = monthNames[date.getMonth()];
// easily get ending date by adding 6 days more
date.setDate(date.getDate() + 6);
// then you can have months
var monthEnd = monthNames[date.getMonth()];
return (monthStart == monthEnd) ? monthStart : [monthStart, monthEnd];
}
console.log(getDateRangeOfWeek(52, 2016));
console.log(getDateRangeOfWeek(51, 2016));
console.log(getDateRangeOfWeek(5, 2017));
&#13;