参考网上很多方法修复了一些bug,例如有些方法当日期为2019-09-01或者2019-04-01这种特殊日期时不能得到正确的结果,话不多说,直接上代码:
function getWeekByDate(str){
str = Date.parse(str);
let date = new Date(str);
let month = date.getMonth() + 1;
let year = date.getFullYear();
let dateN=new Date(str);
//月份第一天
dateN=new Date(dateN.setDate(1));
let w1=dateN.getDay();
// 将字符串转为标准时间格式
let w = date.getDay();//周几
if(w===0&&w1!=0){//当月第一天不是周天,当前日期是周天
w=7;
}
let week = Math.ceil((date.getDate() + 6 - w) / 7);
if(w1!=1)//当月第一天不是周一
week = Math.ceil((date.getDate() + 6 - w) / 7) - 1;
var cNum = ["零","一","二","三","四","五","六","七","八","九"];
if (week === 0) {//第0周归于上月的最后一周
month = date.getMonth();
if(month===0){//跨年
month=12;
year=year-1;
}
let dateLast = new Date(date);
let dayLast = new Date(year, month, 0).getDate();
let timestamp = new Date(year, month - 1, dayLast);
w = new Date(timestamp).getDay();//周几
if (w === 0) {
w = 7;
}
week = Math.ceil((timestamp.getDate() + 6 - w) / 7) - 1;
}
week=cNum[week];
let time = year+"年"+month + "月第" + week + "周";
console.log(time);
}