Date class 转换 Timestamp 错误

Date class converts Timestamp wrong

在我的应用程序中,我正在创建一个实时控制台,我在其中输出消息及其时间戳和内容。根据我的阅读,我在下面使用 Date() class 的方法应该按预期工作,其中时间戳乘以 1000 以获得毫秒数。

我正在记录时间戳以进行调试,并获取类似“1441041070066”的值。当我将它们插入 Epoch/Unix 转换器时,date/time 是正确的。然而,我的代码给我的废话是“22:7:46”,然后 1 分钟后是“20:48:37”。谁能解释一下我在这种情况下做错了什么?

messages.forEach( function (item)
{
    var timestamp = item.Timestamp; // /Date(1440823073243)/
    var timestamp = timestamp.substring(timestamp.lastIndexOf("(")+1, timestamp.lastIndexOf(")"));

    console.log(timestamp);

    var source = item.Source;
    var type = item.Type;
    var contents = item.Contents;

    // Get Date/Time in Milliseconds
    var date = new Date(timestamp * 1000);
    var time = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();

    console_log("<font color='blue'>" + time + "</font>" + ": " + contents);
});

您获得的时间戳已经 in 毫秒。我不知道你使用的是哪个转换器,但是如果你将 1440823073243 放入 epochconverter.com,它会显示:

Assuming that this timestamp is in milliseconds

... 并得出时间戳 GMT: Sat, 29 Aug 2015 04:37:53 GMT.

所以基本上你应该删除代码的 * 1000 部分,但是将 timestamp (仍然是一个字符串)解析为一个数字:

var date = new Date(parseInt(timestamp));

此外,您应该使用其他方式来格式化日期:

  • 您当前使用的是用户的时区;目前尚不清楚这是否是您想要的。 (很可能是,但你应该考虑一下。)
  • 通过仅使用字符串连接,您不会得到任何填充,从而导致像“22:7:46”这样的字符串。

基本上,研究替代格式选项 - 无论是作为 Javascript 标准库的一部分,还是与 moment.js.

之类的东西一起使用