- element的日期选择器支持按周进行选择,但是选中后显示的是xxxx年第x周,不符合需求,并且打印出来是中国标准时间 Mon May 04 2020 00:00:00 GMT+0800 (中国标准时间)
- 实现效果
html部分:
<template>
<el-date-picker
v-model="seletWeekValue"
:editable="false"
style=" opacity: 0;position: absolute;z-index: 100;"
size="small"
:picker-options="{ 'firstDayOfWeek': 1 }"
type="week"
format="yyyy年第WW周"
:clearable="false"
:default-time="['00:00:00', '23:59:59']"
placeholder="选择查询时间"
@change="changeweek"
>
</el-date-picker>
<div>
<el-input v-model="weekTime" :clearable="true" placeholder="请选择日期">
</el-input>
</div>
</template>
js部分:
<script>
export default {
data() {
return {
seletWeekValue: '',
weekTime: '',
startTimeNum: '',
endTimeNum: ''
}
},
methods:{
timestampToTime(timestamp) {
var date = new Date(timestamp) // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
let Y = date.getFullYear() + '-'
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
let D = date.getDate() + ' '
return Y + M + D
},
// 周选择器开始时间和结束时间
changeweek(val) {
// val===> Mon Nov 09 2020 00:00:00 GMT+0800 (中国标准时间)
let todayDay = val ? new Date(val) : new Date()
let todayOfWeek = todayDay.getDay()
// let todayOfmonth = todayDay.getMonth()
// let todayOfDate = todayDay.getDate()
let spendDay = 1
if (todayOfWeek !== 0) {
spendDay = 7 - todayOfWeek // 开始时间到结束时间还有几天
}
// 86400000为一天的毫秒数
this.startTimeNum = todayDay.valueOf() - (6 - spendDay) * 86400000 // 开始时间时间戳
this.endTimeNum = todayDay.valueOf() + spendDay * 86400000 // 结束时间时间戳
let startTimeStr = this.timestampToTime(this.startTimeNum) // 时间戳转字符串
let endTimeStr = this.timestampToTime(this.endTimeNum)
this.weekTime = startTimeStr + ' - ' + endTimeStr // 选择的范围
console.log(this.weekTime) // 2021-11-15 - 2021-11-21
}
}
}
</script>
如果想要回显,可以在mounted生命周期中调用this.changeweek(),传入中国标准时间。如果要传入yyyy-mm-dd格式的时间需要使用new Date进行格式化。
mounted() {
let val = new Date('2019-11-2') //如果要回显的话只需传入开始时间
this.changeweek(val)
}
参考文章https://blog.csdn.net/weixin_45695727/article/details/108694785