//获取当前日期的周一
getMonday(dd) {
let week = dd.getDay(); //获取时间的星期数,周日是0
let minus = week ? week - 1 : 6;
dd.setDate(dd.getDate() - minus); //获取minus天前的日期
let y = dd.getFullYear();
let m = dd.getMonth() + 1; //获取月份
m = m < 10 ? ('0' + m) : m;
let d = dd.getDate();
d = d < 10 ? ('0' + d) : d;
return y + "-" + m + "-" + d;
},
//根据周获取当前周最后一天,再获取那天的所在周的周一
//"week:2018-W35" return:2018-8-27
getDayForWeek(week){
if (week.length < 0) {
return false;
}
let myDate = new Date(week.split("-")[0], 0, 1);//设置当前年的1月1日
let myweek = myDate.getDay(); //获取时间的星期数,周日是0
myweek = myweek ? myweek - 1 : 6;
//如果1号<周五,则为第一周,>周五则为去年最后一周
if (myweek < 4) {
//前移日期
myDate.setDate(myDate.getDate() - myweek);
} else {
//后移日期
myDate.setDate(myDate.getDate() + 7 - myweek);
}
myDate.setDate(myDate.getDate() + parseInt(week.split("W")[1] - 1) * 7); //获取周的加成
return this.getMonday(myDate);
},
//获取日期在当前年的周数
//day: 2018-8-27 week:2018-W05
getWeekForDay(day){
let da = '';
if (day == undefined) {
let now = new Date();
da = this.getMonday(now);
} else {
da = day;
}
//(当前日期-当年第一周第一天)/7 = 周次
let date1 = new Date(Date.parse(da));//当前日期
date1 = this.getMonday(date1);
date1 = new Date(Date.parse(date1));
date1.setDate(date1.getDate() + 3); //获取当前日期的周四(针对每年第一个月不同周次的计算)
let date2 = new Date(date1.getFullYear(), 0, 1); //当年的1月1号
let dateWeekNum = date2.getDay();//获取时间的星期数,周日是0
dateWeekNum = dateWeekNum ? dateWeekNum - 1 : 6;
//如果1号<周五,则为第一周,>周五则为去年最后一周
if (dateWeekNum < 4) {
//前移日期(本周一)
date2.setDate(date2.getDate() - dateWeekNum);
} else {
//后移日期(下周一)
date2.setDate(date2.getDate() + 7 - dateWeekNum);
}
//Math.round 四舍五入到整数
let d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000); //86400000==1000毫秒 * 60秒 * 60分钟* 24小时==天数
//得到年数周数
let year = date1.getFullYear();
//向上取整
let week = Math.ceil((d + 1) / 7);
week = week < 10 ? ('0' + week) : week;
console.log(year + "-W" + week);
return year + "-W" + week;
}