项目中有一个预约查询需求,要求查询的时间必须是未来时间(此处的未来时间是精确到日即可),因为用户通过选择器返回的时间也只有日期部分。
我首先想到的就是使用js时间对象,通过输出发现,当new Date()接收参数只精确到日期时,时分秒默认精确到8:00, 因此我的想法是new 一个现在的时间对象,再通过方法将时间强制设置到8:00,在时间层面上相等,只比较日期即可。
nowTime(){
var now =new Date()
now.setHours(8)
now.setMinutes(0)
now.setSeconds(0)
return now
},
然后再进行比较
var searchDate = new Date(e.detail.value)
if(searchDate < this.nowTime())
结果发现当查询时间等于大于现在时间时,还是会进入if语句中。
后来我使用了getTime()函数进行输出,发现now的输出每次都不一样!
对!突然顿悟, 我忽略了毫秒的强制设定,于是加上:
nowTime(){
var now =new Date()
now.setHours(8)
now.setMinutes(0)
now.setSeconds(0)
now.setMilliseconds(0)
console.log(now)
return now
},
成功!
可是又突然产生疑问,判断两个时间对象是否相等的话是不能直接用对象比较的(因为他们比较的不是值,而是地址),但是为什么大于判断就可以成功完成逻辑呢?如果是因为searchDate先被定义,如果是他的地址比较小,那也应该是每次都进入if 语句内呀?