date-picker 开始时间小于结束时间的限定

888 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

date-picker 开始时间小于结束时间的限定

  • 最近在项目中遇到一个开始时间小于结束时间的限制问题,产品要求所有的计划开始时间小于计划结束时间,施工开始时间小于施工结束时间等等。比如施工开始时间选择9月2号,那么在选择施工结束时间的时候9月2号之前的日期不可选择状态,呈现灰色,只能选择2号之后的日期。
<el-form-item label="施工开始时间">
    <el-date-picker
        v-model="starttime"
        :value-format="formattime"
        type="date"
        :picker-options="pickerStartOptions"
    ></el-date-picker>
</el-form-item>
<el-form-item label="施工结束时间">
    <el-date-picker
        v-model="endtime"
        :value-format="formattime"
        type="date"
        :picker-options="pickerEndOptions"
    ></el-date-picker>
</el-form-item>

这是个vue+elementui 的项目,需要在data中声明变量。

    return {
         starttime:'',
         endtime:'',
         formattime:'yyyy/mm/dd',
         pickerStartOptions: {
                disabledDate: (time) => {
                    if (this.endtime != "") {
                        return time.getTime() >  new Date(this.endtime).getTime();
 
                }
            },
            pickerEndOptions: {
                disabledDate: (time) => {
                    return time.getTime() < new Date(this.starttime).getTime();
                }
            },
    }      
}

v-model 的值是毫秒级的,在保存的时候需要转换成2021-09-02的格式,在utils的config.js里export一个时间转化的公共方法。然后在查看的时候需要把日期格式转换成毫秒级的才会显示。

//毫秒级日期 转 ‘年-月-日’
//补0
function setzero(num) { 
    if (num < 10) {
       return '0' + num;
      } else { 
       return '' + num; 
     } 
 }
export function getdate(seconds) {
        var time = new Date(seconds);
	var year = time.getFullYear();//年
	var mon = setzero(time.getMonth() + 1);//月
	var day = setzero(time.getDate());//日
        return year + " - " + mon + " - " + day ;
}
//‘年-月-日’转毫秒级日期
export function getseconds(date){
       return (new Date(data)).getTime();
}

点击保存按钮需要传值,以及编辑按钮也需要传值。 调接口的参数是data,那么

data.starttime=(this.starttime!=="" || this.starttime !==null) ? $T.getdate(this.starttime):'';
data.endtime=(this.endtime!=="" || this.endtime !==null) ? $T.getdate(this.endtime):'';

在返回来查询浏览赋值回显的时候,调查询接口拿到data,那么

this.starttime = $T.getseconds(data.starttime);
this.endtime = $T.getseconds(data.endtime);