一:这里设置的是控制日期选择范围最大不超过一周
1:如果想要控制时间的单位精确到分的话可以加上 format="yyyy-MM-dd HH:mm value-format="yyyy-MM-dd HH:mm" 这两个属性。
2.html部分 设置:picker-options="pickerOptions" 这个属性开启格式化日期
<el-date-pickerv-model="formData.timer"type="datetimerange"unlink-panelsrange-separator="至"start-placeholder="开始日期"end-placeholder="结束日期":picker-options="pickerOptions"/>
3.js部分 这里是写在data里面 我这里控制的最大范围为一周
data() {return {pickerMinDate: null,pickerMaxDate: null,day7: 7 * 24 * 3600 * 1000,pickerOptions: {// 限制时间// selectableRange: ['12:00:00 - 23:59:59'],// 限制日期// disabledDate: this.disabledDateonPick: ({ minDate }) => {if (minDate && this.pickerMinDate) {this.pickerMinDate = null;} else if (minDate) {this.pickerMinDate = minDate.getTime();}},disabledDate: (time) => {if (this.pickerMinDate) {return time.getTime() > this.pickerMinDate + this.day7 || time.getTime() < this.pickerMinDate - this.day7;}return false;}}}}
二:格式化传递给后端的时间戳
这里组件自带的打印时间为汉字这种类型的
可以采取一个计算属性把汉字转换为10位的数字时间戳传给后端 这里/1000是转换为10位的 如果后端要求13位时间戳 则 这里可不用/1000
// 计算属性computed: {searchForm() {return {time_from: new Date(this.form.timer[0]).getTime() / 1000 || '',time_to: new Date(this.form.timer[1]).getTime() / 1000 || ''};}},
打印出来就是这样的时间戳
三,将时间戳格式化为页面显示为汉字的时间
1.当后端返回的时间戳为10位的时候 可以全局下个moment.js时间格式化的包 然后再main.js全局注册一个$formatUnixTime的方法。
Vue.prototype.$formatUnixTime = function (time, format) {return Number(time) === 0 ? '' : moment.unix(time).format(format || 'YYYY-MM-DD HH:mm:ss');};
2接下来在组建中就可以用
this.$formatUnixTime(时间戳) 将日期转为汉字的啦 如下图
四,处理日期组件回显的问题
这里分两种情况
1.如果现在日期组件绑定的timer数组里面为两个时间戳的话的话 ,则可以直接绑定 但是我这时候后端返回的是10位的时间戳 所以我需要将时间戳*1000不然回显的时间就是1970年了
将两个10位的时间戳分别*1000则可以达到正常时间,如果是13位时间戳 则可以不用*10
这是*1000后正常的
这是没有*1000的 则出现了10位时间戳 日期位1970的错误情况
2.如果后端返回的直接是一个数组里面两个汉字的日期的话 我们直接渲染在页面上就可以 ,则回显日期的话可以采取下面的方法 下面'2025-03-30 16:28:52' 这是我写死的 只是做测试的 工作中可以从上面的row里面拿到真实返回汉字的时间,将汉字转换为时间戳就好 这里时间戳直接是13位的正确的 不用*1000了