一、场景描述
场景需求是一个日历范围选择器,除当天外其他日期不可选,于是就:
pickerOptions: {
return {
disabledDate: (time) => {
return new Date(time).getTime() >= Date.now() + 8.64e6 || time.getTime() < Date.now()
}
}
}
二、问题反馈
晚上十点后,日历面板中当天无法选择,变成禁用状态了 ?_?
三、查找原因
经过各种日期打印,时间戳转换,发现居然是加了8.64e6导致的 (注:8.64e6 是科学计数法,即8640000,也就是1000 * 60 * 144 = 两小时24分钟),所以出现晚上十点后,发现当天无法选择,变成禁用状态了,准确的说是21:37分之后就出现了。被坑了一波,大晚上被叫定位查看问题-_-
四、总结
pickerOptions: function() {
return {
disabledDate: (time) => {
// 8.64e7科学计数法,等同于 1000 * 60 * 60 *24,表示一天的毫秒数
// 8.64e7 * days:days表示天数,当天为1,两天为2,依次类推,表示当天可用,前两天/后两天可用
// 单个禁用
// return time.getTime() < Date.now() - 8.64e7 * 1 // 当天可用,当天以前的日期不可用
// return time.getTime() < Date.now() // 当天不可用,当天以前的日期不可用
// return time.getTime() > Date.now() // 当天可用, 当天以后的日期不可用
// return time.getTime() > Date.now() - 8.64e7 * 1 // 当天不可用,当天以后的日期不可用
// 组合使用
// return time.getTime() < Date.now() - 8.64e7 * 1 || time.getTime() > Date.now() // 当天可用
// return time.getTime() < Date.now() - 8.64e7 * 2 || time.getTime() > Date.now() // 当天、昨天的能用
// return time.getTime() < Date.now() - 8.64e7 * 2 || time.getTime() > Date.now() // 当天、昨天、前天的能用
// return time.getTime() < Date.now() || time.getTime() > Date.now() + 8.64e7 * 1 // 明天可用
// return time.getTime() < Date.now() || time.getTime() > Date.now() + 8.64e7 * 2 // 明天、后天可用
// return time.getTime() < Date.now() || time.getTime() > Date.now() + 8.64e7 * 3 // 明天、后天、大后天可用
}
}
}
总结:以Date.now()为当前节点进行比对,在此基础上减少/增加8.64e7*天数,即可实现日历面板的禁用状态
注意点:disabledDate需要的是一个最后的布尔值,在组合使用中,||取值,注意先后顺序问题
注:element-ui版本:^2.15.4