【问题标题】:moment.js offset by one day issuemoment.js 抵消了一天的问题
【发布时间】:2016-05-02 22:52:55
【问题描述】:

我的一些用户报告了不同的输出,偏移了一天。

代码:

var call=[1451084400000,1451170800000,1451257200000,1451343600000,1451430000000,1451516400000,1451602800000,1451689200000,1451775600000]

    var arrayLength = call.length;
    for (var i = 0; i < arrayLength; i++) {
    document.getElementById('output').innerHTML += moment(call[i],"x").format("YYYY-MM-DD")+"<br>"
    }

预期结果:

2015-12-26
2015-12-27
2015-12-28
2015-12-29
2015-12-30
2015-12-31
2016-01-01
2016-01-02
2016-01-03

问题:

2015-12-25
2015-12-26
2015-12-27
2015-12-28
2015-12-29
2015-12-30
2015-12-31
2016-01-01
2016-01-02

有什么想法吗?

【问题讨论】:

  • 很可能与时区偏移有关。如果您可以记录实际的毫秒计数,您很可能会看到这些值是相同的,您只是根据时区达到了日期边界。
  • 不是完全相同的副本(它不使用 moment.js),但它是同一个问题:Why is new Date() removing a day?
  • 另见stackoverflow.com/questions/36165182/…。这是一个特定时刻的问题/答案。基本上,你想要 moment.utc()
  • @MaggiePint 现在好了,当我使用 parseZone 时,我遇到了与用户看到的相同的问题。但是...正确的日期没有 parseZone :)
  • 你看到的是正确的日期,你假设的日期是错误的。 1451084400000 的时间值是 2015-12-25T23:00:00.000Z,即 GMT。将时区更改为东部 1 小时或更长时间,并且日期会更改。

标签: javascript datetime momentjs


【解决方案1】:

尝试转换为所需的时区。伦敦时区应该是这样的:

date.clone().tz("Europe/London");

【讨论】:

  • 1.我希望这是通用的 2. 用户在 tz +3/+2 小时内,而不是一整天
  • 有时会因为几个小时的差异而增加一整天。不要忘记定义时区,您将永远不会遇到问题。
  • 好的,但是为每个日期添加 tz,而且我有很多,这会大大降低脚本速度
  • 所以基本上一切都应该在UTC
  • news.ycombinator.com/item?id=3198580 。它可以简化编码,但会使比较普通人的相对时间变得更加困难。这取决于我们来适应......
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
相关资源
最近更新 更多