// 其实时间和结束时间,获取期间各周首位
class getDateWeekList {
constructor(start, end) {
this.start = start
this.end = end
}
// 获取时间格式
getDateText(dd) {
const nDate = new Date(dd)
const y = nDate.getFullYear();
const m = nDate.getMonth() + 1; //获取月份
const d = nDate.getDate();
return y + "-" + m + "-" + d;
}
// 获取任意日期的 周一 或者 周日
getMondayOrSunday(date, state) {
const dd = new Date(date)
const week = dd.getDay(); //获取时间的星期数
let minus = 0
if (state === 'start') {
minus = week ? week - 1 : 6;
} else {
minus = week ? week - 7 : 0;
}
// 补时间差值
return this.getDateText(dd.setDate(dd.getDate() - minus))
}
// 补开始时间和结束时间
fillDate(start, end) {
return {
start: this.getMondayOrSunday(start, 'start'),
end: this.getMondayOrSunday(end, 'end')
}
}
getWeekList() {
let weekList = []
let dates = this.fillDate(this.start, this.end)
let start = new Date(dates.start)
let end = new Date(dates.end)
while (start < end) {
let weekText = ''
const initStart = this.getDateText(start)
const s = start.setDate(start.getDate() + 7)
weekText = initStart + '~' + this.getDateText(new Date(s).setDate(new Date(s).getDate() - 1))
weekList.push({
monday: new Date(initStart).valueOf(), // 周一
sunday: new Date(s).setDate(new Date(s).getDate() - 1), // 周日
weekText: weekText
})
}
return weekList
}
}
/* ---------- 开始执行 ---------- */
// const endTime = new Date().valueOf()
const endTime = 1685462399000
// 获取当周周一
const monday = getMonDay(endTime)
// 获取开始时间
const startTime = monday - (86400000 * 21)
// 获取各周首尾时间
const weekList = getWeekList(startTime, endTime)
console.log(startTime, endTime)
console.log(JSON.stringify(weekList))
/* ---------- 其他方法 ---------- */
// 获取任意时间当周的周一凌晨时间戳
function getMonDay(endTime) {
const time = new Date(endTime)
const timeNum = new Date(endTime).valueOf()
const day = time.getDay() > 0 ? time.getDay() : 7 // 表示当前是周几
const oneDayTime = 24 * 60 * 60 * 1000 // 一天的总ms
// 选择时间当周的周一时间戳
const MondayTime = timeNum - (day - 1) * oneDayTime
return new Date(new Date(MondayTime).setHours(0, 0, 0, 0)).valueOf()
}
// 调用class
function getWeekList(start, end) {
const weekList = new getDateWeekList(start, end)
return weekList.getWeekList()
}
console