Date类错误地转换Timestamp

时间:2015-08-30 17:16:31

标签: javascript jquery datetime unix-timestamp epoch

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

我正在记录时间戳以进行调试,并获得类似" 1441041070066"的值。当我将它们插入Epoch / Unix转换器时,日期/时间是正确的。然而,我的代码正在给我的废话,如#34; 22:7:46"然后1分钟后#34; 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);
});

1 个答案:

答案 0 :(得分:2)

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

  

假设此时间戳以毫秒为单位

...并提供GMT: Sat, 29 Aug 2015 04:37:53 GMT的时间戳。

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

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

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

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

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