这几天刚好写到这个,逻辑其实不难,但是涉及到时间戳转换来转换去的,需要很细心走一遍。特此把代码记录一下。
代码
// 获取当天0点的时间戳
getStartTime(time) {
const nowTimeDate = new Date(time)
return nowTimeDate.setHours(0, 0, 0, 0)
},
// 时间戳转日期格式
timestampToTime(timestamp) {
var date = new Date(timestamp)
var Y = date.getFullYear() + '-'
var M =
(date.getMonth() + 1 < 10
? '0' + (date.getMonth() + 1)
: date.getMonth() + 1) + '-'
var D = date.getDate()
// var h = date.getHours() + ':';
// var m = date.getMinutes() + ':';
// var s = date.getSeconds();
// return Y + M + D + ' ' + h + m + s
return Y + M + D
},
// 获取一周的日期
getWeekList(type) {
let week = []
for (var i = 0; i < 7; i++) {
let weekObj = {
name: this.weekName[i],
date: '',
timeStamp: '',
}
week.push(weekObj)
}
let today = this.getStartTime(Number(new Date())) // 当天时间戳
let today_week = new Date().getDay() // 当天星期几
if (today_week == 0) {
// 若当天为周日
week[6].timeStamp = today
} else {
week[today_week - 1].timeStamp = today
}
var leftNum = today_week - 1 // 本周内今天的前几天的数量
var rightNum = 7 - today_week // 本周内今天的后几天的数量
for (var left = 0; left < leftNum; left++) {
week[left].timeStamp =
today - (today_week - left - 1) * 1000 * 60 * 60 * 24
}
for (var right = 0; right < rightNum; right++) {
week[right + today_week].timeStamp =
today + (right + 1) * 1000 * 60 * 60 * 24
}
week.map((el) => {
el.date = this.timestampToTime(el.timeStamp)
})
this.weekList = JSON.parse(JSON.stringify(week))
console.log(this.weekList)
},
简单逻辑就是
- 先将星期几的名字记录在一个数组week中;
- 获取到当天时间戳和当天星期几。这一步需要注意js获取星期几,周日-周六对应的是0-6,容易出错。还有就是我怕时间数据出错,获取当天的时间戳转成当天0点的时间戳;
- 根据当天星期几获取到本周前几天的数量和后几天的数量,再通过循环遍历时间戳运算将本周每天的时间戳存入week数组;
- 最后通过遍历week数组,通过时间戳转化成日期格式,成功获取到当前一周的日期数据。