我必须使用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);
答案 0 :(得分:0)
尝试这个
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))
答案 1 :(得分:0)
通过将输入日期回滚到上一个星期一,然后将星期一日期除以7,然后四舍五入,可以找到从星期一开始的一周(与ISO week date系统一致)的月份的星期数以确定日期属于哪个月。
此方法将正确处理一个月初的日期,该日期实际上落在上个月的最后一周。例如,2020-04-04是从2020-03-30(星期一)开始的一周中的星期六,因此它应该返回第5周,因为它是3月5日的一部分(而不是3月的第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