我必须使用JavaScript找到给定日期的月份周数。周开始是星期一。
我已经尝试了下面的代码,但没有得到准确的结果。
function getWeekNumber(date) {
var monthStartDate = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
monthStartDate = new Date(monthStartDate);
var day = monthStartDate.getDay();
date = new Date(date);
var date = date.getDate();
let weekNumber = Math.ceil((date + (day)) / 7);
return (weekNumber == 0) ? 1 : weekNumber;
}
var week = getWeekNumber('2020-04-04');
console.log(week);
试试这个吧
function getWeek(date) {
let monthStart = new Date(date);
monthStart.setDate(0);
let offset = (monthStart.getDay() + 1) % 7 - 1; // -1 is for a week starting on Monday
return Math.ceil((date.getDate() + offset) / 7);
}
getWeek(new Date(2019, 2, 14))
您可以通过将输入日期回滚到上一个星期一然后将星期一日期除以7并向上舍入以确定该月的哪一周来找到星期一开始的星期的星期数(与ISO week date系统一致)日期属于。
这种方法将适当地处理一个月初的日期,该日期实际上落在上个月的最后一周。例如,2020-04-04是从2020-03-30(星期一)开始的一周中的星期六,所以它应该返回第5周,因为它是3月的第5周的一部分(并且不是第1周的一部分) 4月开始于2020-04-06,即4月的第一个星期一)。
例如(开头的split
位只是解析日期字符串而不是依赖new Date()
来解析字符串,因为浏览器不一致所以不推荐这样做):
const monthWeek = (s) => {
let [y, m, d] = s.split('-'); // parse date string
let date = new Date(y, m - 1, d); // create date object
date.setDate(d - ((date.getDay() + 6) % 7)); // adjust date to previous Monday
return Math.ceil(date.getDate() / 7); // return week number of the month
}
console.log(monthWeek('2020-04-04'));
// 5
console.log(monthWeek('2020-04-07'));
// 1