代码之家  ›  专栏  ›  技术社区  ›  Philippe Hebert

JS日期API:两个日期之间以小时为单位的差异“奇数行为与当前日期[重复]

  •  0
  • Philippe Hebert  · 技术社区  · 7 年前

    我知道这是一个基本的问题,可能已经回答过,但我一直在为这个问题挠头。这里是:

    我想知道一个设定日期和当前时间之间的小时数。

    我尝试了以下方法(这是在2018/05/23 21:35 UTC-4:00完成的):

    (new Date(2018, 05, 24).getTime() - new Date(2018,05,23).getTime())/(3600*1000) // 24
    
    (new Date(2018, 05, 24).getTime() - new Date().getTime())/(3600*1000) // 746.4949...
    

    奇怪的是,从当前时间中减去明天会得到746小时。预期我会得到2.4小时。我还尝试了以下变化:

    // Straight up dates
    
    (new Date(2018, 05, 24) - new Date(2018,05,23))/(3600*1000) // 24
    
    (new Date(2018, 05, 24) - new Date())/(3600*1000) // 746.4949...
    
    // Using valueOf
    
    (new Date(2018, 05, 24).valueOf() - new Date(2018,05,23).valueOf())/(3600*1000) // 24
    
    (new Date(2018, 05, 24).valueOf() - new Date().valueOf())/(3600*1000) // 746.4949...
    
    // Using Date.now()
    
    (new Date(2018, 05, 24).valueOf() - new Date().now())/(3600*1000) // 746.4949...
    

    你知道为什么这是一个问题,以及如何解决它吗?

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  3
  •   Barmar    7 年前

    javascript日期中的月份数是以零为基础的,因此 new Date(2018, 05, 24) 是2018年6月24日,而不是2018年5月24日。从月数中减去1,得到您期望的结果。

    console.log((new Date(2018, 4, 24).getTime() - new Date().getTime())/(3600*1000))

    这张照片是关于 2.14 当我在5月23日21:50 UTC-04:00运行它时。

        2
  •  1
  •   Gaurav Gandhi    7 年前

    如上文所述 MDN

    注: 参数月份基于0。这意味着一月=0,十二月=11。

    最简单的方法是计算两个日期的时差,( ref )

    var hours = Math.abs(date1 - date2) / 36e5;
    

    减法返回两个日期之间以毫秒为单位的差。36e5是60*60*1000的科学符号,除以它可以将毫秒差转换为小时。