【问题标题】:Date class converts Timestamp wrong日期类转换时间戳错误
【发布时间】:2015-11-24 18:39:08
【问题描述】:

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

我正在记录时间戳以进行调试并获取诸如“1441041070066”之类的值。当我将它们插入 Epoch/Unix 转换器时,日期/时间是正确的。然而,我的代码给了我的废话,比如“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);
});

【问题讨论】:

  • 为什么“22:7:46”在没有填充的情况下进行格式化?
  • 预期结果是什么?
  • 我指的不是单个数字,而是指出在仅相隔几分钟的条目上,小时/分钟发生了巨大变化。

标签: javascript jquery datetime unix-timestamp epoch


【解决方案1】:

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

假设这个时间戳是以毫秒为单位的

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

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

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

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

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

基本上,研究替代格式选项 - 无论是作为 Javascript 标准库的一部分,还是使用 moment.js 之类的东西。

【讨论】:

  • 感谢您的信息!我在测试时尝试过不使用乘数,只是再次这样做,但它给了我“NaN:NaN:NaN”。关于格式,我没有意识到这会显示用户的时区,但在我让它正常工作后我一定会考虑到这一点。
  • @BrettPowell:啊,那个 NaN 是因为目前你有 timestamp 作为字符串。
  • 啊,非常感谢,已经解决了。我正要开始拔头发。总是最小的问题,但现在很有意义。
  • @BrettPowell:动态类型语言的乐趣... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2016-10-16
  • 2023-03-29
  • 2020-01-17
  • 2020-10-19
相关资源
最近更新 更多