今天做页面的时候有这样一个需求,element的时间选择器只能选择一星期的数据,并且根据时间选择器选择的时间展示echarts轴的时间。这里一般的解决的方法是把时间范围发给后端,后端会带着数据返回。但是,前端也可以完成时间轴的获取。
一、时间选择一星期
Element有一个叫picker-options的属性,可以控制禁止选取的日期。
它绑定data中的一个对象,对象中可以设置方法。直接上代码。
pickerOptions: { onPick: ({ maxDate, minDate }) => { // 把选择的第一个日期赋值给一个变量。 this.choiceDate = minDate.getTime() // 如何你选择了两个日期了,就把那个变量置空 if (maxDate) this.choiceDate = '' }, disabledDate: time => { // 如何选择了一个日期 if (this.choiceDate) { // 7天的时间戳 const one = 6 * 24 * 3600 * 1000 // 当前日期 - one = 7天之前 const minTime = this.choiceDate - one // 当前日期 + one = 7天之后 const maxTime = this.choiceDate + one return ( time.getTime() < minTime || time.getTime() > maxTime || // 限制不能选择今天及以后 time.getTime() > Date.now() ) } else { // 如果没有选择日期,就要限制不能选择今天及以后 return time.getTime() > Date.now() } } },
二、获得日期数组
Echarts的x轴的data是一个数组,而我们只有两个日期,还是个字符串,所以我们现需要把两个日期字符串转变为能够计算的毫秒数。
var bd = new Date(arr[0]), be = new Date(arr[1]); //转为中国标准时间 var bd_time = bd.getTime(), be_time = be.getTime(), time_diff = be_time - bd_time; //转为毫秒 var d_arr = []; for (var i = 0; i <= time_diff; i += 86400000) { var ds = new Date(bd_time + i); d_arr.push((ds.getMonth() + 1) + '-' + ds.getDate()) }
首先通过new Date()转变为中国标准时间,再通过getTime转变为毫秒数,计算出两个日期相差的时间,利用for循环,每次循环增加86400000ms也就是一天的时间,每次循环都返回一个“月-日”的字符串,并利用push加入到数组中,这样就得到了数组。
如果需要补0就判断ds.getMonth和ds.getDate的大小,如果小于10就+‘0’。
然后我们把d_arr作为x轴的数据就可以了。
上一篇: echarts巧用箭头函数获取Vue实例
下一篇: 营销型网站设计的特征和注意事项