JS Date API:以小时为单位的两个日期之间的差异 - 当前日期

时间:2018-05-24 01:42:45

标签: javascript date datediff

我知道这是一个以前可能已经回答的基本问题,但我一直在为这个问题烦恼不已。所以这就是:

我想获得设定日期和当前时间之间的小时数。

我尝试了以下(这是在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.4h。我还尝试了以下变化:

// 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 个答案:

答案 0 :(得分:3)

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))

当我在5月23日21:50 UTC-04:00运行它时会打印2.14

答案 1 :(得分:1)

正如MDN

所述
  

注意:参数月份为0。这意味着1月= 0和12月= 11。

在两小时之间获得差异的最简单方法,(ref

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

减法返回两个日期之间的差异(以毫秒为单位)。 36e5是60 * 60 * 1000的科学记数法,除以将毫秒的差异转换为小时。