【问题标题】:Difference between 17 digits timestamp17位时间戳的区别
【发布时间】:2018-12-20 10:59:43
【问题描述】:

目前,我正在使用 Node.js 中的 UTC+02:00 时区。 我想计算两个 17 位时间戳之间的差异。例如,我有两个时间戳:20180712080000000 (YYYYMMDDHHmmssSSS)2018/07/12 10:00:00 00020180712060000000 (YYYYMMDDHHmmssSSS)2018/07/12 08:00:00 000。如果我要计算这两个时间戳之间的差异,那么输出可能是20000000(实际上应该是 2 小时)。如果我将两个时间戳(即20000000)的差异转换为小时,那么答案是5.56 hrs,但它应该是2 hrs。

我错过了什么吗?

请随时纠正我。

到目前为止我尝试过:

let starttime = 20180712060000000; // UTC + 2
let endtime =   20180712080000000; // UTC + 2
console.log("Difference is ",endtime-starttime);

【问题讨论】:

  • 这不是你构建时间戳的方式!
  • @DenysSéguret:我知道,但提到的时间戳在我当前的项目中是兼容的。

标签: javascript node.js timestamp


【解决方案1】:

如果您必须使用这种时间戳(17 个字符长的字符串),您可以将它们转换为 Date 对象,如下所示:

    var date1 = '20180712060000000'
    var date2 = '20180712080000000'

    function timestampToDate(dateString) {
      return new Date(dateString.substring(0, 4), 
        parseInt(dateString.substring(4, 6)) - 1, 
        dateString.substring(6, 8), 
        dateString.substring(8, 10), 
        dateString.substring(10, 12), 
        dateString.substring(12, 14), 
        dateString.substring(14, 16))
    }

    var date1Object = timestampToDate(date1)
    var date2Object = timestampToDate(date2)
    
    var difference = Math.abs(date1Object - date2Object) // this will hold the difference in milliseconds
    var differenceInHours = difference / 36e5
    
    console.log(differenceInHours)

为了避免必须像那样剖析字符串,您可以考虑使用像 moment (https://momentjs.com/) 这样的时间库

你可以做这样的事情:

var date1 = moment('20180712060000000', 'YYYYMMDDHHmmssSSS')
var date2 = moment('20180712080000000', 'YYYYMMDDHHmmssSSS')

var difference = moment.duration(date1 - date2).hours()

【讨论】:

  • 感谢您的解决方案。我正在使用moment.js 库。 moment.js 库有什么容易做的吗?我找不到。
  • 为你更新答案moment.js:你能再检查一下吗?我收到TypeError: (date2 - date1).duration is not a function 错误。
  • 是的,很抱歉我出错了,我现在更新并测试了它;)
  • 感谢完美的解决方案!
  • 哎呀...您需要从月份中减去一个(月份从零开始)
【解决方案2】:

您使用的数字不是有效的时间戳。

您可以提供给Date 构造函数的时间戳是自 Epoch 以来的毫秒数。

您可以使用date.getTime()从日期获取它:

let starttime = new Date("2018-07-12T06:00:00").getTime(); // assuming local TZ

【讨论】:

  • 这意味着我需要做console.log("Difference is ",endtime.getTime()-starttime.getTime());我对吗?
  • 这个差异将是毫秒数。 2 小时是720000
  • 感谢您的及时回复。但是如何将20180712060000000 转换为2018-07-12T06:00:00
【解决方案3】:

使用this library 获得更简洁、更好的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2011-05-17
    相关资源
    最近更新 更多