记js时间对象比较的一次经历

本文探讨了在JavaScript中如何正确判断未来时间。作者在实现预约查询需求时遇到问题,发现仅设置到小时的日期对象在比较时由于毫秒级差异导致不准确。通过深入研究,作者解决了这个问题,确保时间比较时精确到毫秒。最终,通过设置时间到8:00并清除毫秒,实现了有效的时间比较。这个过程提醒我们在处理时间比较时要注意精度问题。
摘要由CSDN通过智能技术生成

项目中有一个预约查询需求,要求查询的时间必须是未来时间(此处的未来时间是精确到日即可),因为用户通过选择器返回的时间也只有日期部分。

我首先想到的就是使用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 语句内呀?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值