在长原始时间戳值中转换Unix时间戳

时间:2013-11-24 20:06:33

标签: javascript jquery node.js mongodb meteor

unix时间戳作为NumberLong(1385297660000000000)存储在数据库(mongodb)中。检索时间戳时,Chrome的开发者控制台会将其显示为:

timestamp: Object
    _bsontype: "Long"
        high_: 322539745
        low_: -2018573312

如何检索原始的unix时间戳?

2 个答案:

答案 0 :(得分:2)

您也可以使用这种快捷方式:

longToDate = function(longValue) {
    var high = longValue._bsontype.high_;
    var low = longValue._bsontype.low_;
    return new Date(((high >>> 0) * Math.pow(16,8) + (low >>> 0))/Math.pow(10,6))
}

然后只需使用它,例如timestamp

longToDate(timestamp)
=> Sun, 24 Nov 2013 12:54:18 GMT

答案 1 :(得分:0)

感觉有点矫枉过正,但这很有效:

  1. 前往Long.js图书馆
  2. 将库的Long.min.js放入Meteor项目的/lib文件夹中,以便客户端和服务器都可以使用Long对象(如果需要;否则将其放在/client/lib或{{1}中(视情况而定)
  3. 根据docs,使用以下代码;甚至可以在客户端工作:
  4. (参见工作示例here

    /server/lib

    因此,如果您真的想要Unix时间戳,请参阅上面的var Long, value, unixTimestamp, jsTimestamp, date; Long = dcodeIO.Long; value = new Long(-2018573312, 322539745).toNumber(); // 1385297658711573500, almost the original 1385297660000000000 // Unix timestamps are in seconds, so lop off the last 9 digits unixTimestamp = Math.round(value / 1000000000); // 1385297659 // JavaScript timestamps are in milliseconds, so lop off the last 6 digits jsTimestamp = Math.round(value / 1000000); // 1385297658712 // Create Date object (if desired) date = new Date(jsTimestamp); // Sun Nov 24 2013 07:54:18 GMT-0500 (EST) 变量;或者我假设您可能更喜欢JavaScript unixTimestamp对象,在这种情况下使用上面的Date()变量。您需要做的就是将时间戳对象的低值和高值放到我在此代码中放置date-2018573312的位置。请注意,时间戳都不等于原始的138529766 Unix时间戳;进出Long数字类型会丢失一些精度。