【问题标题】:DST conversion issue with moment add时刻添加的 DST 转换问题
【发布时间】:2016-01-31 01:20:57
【问题描述】:

我正在尝试在 DST 时区添加小时数。小时数已正确添加,但未识别 ​​DST 时区。

示例:我将 4 小时添加到“2015 年 10 月 31 日星期六 20:00:00 GMT-0400”,即东部夏令时间。添加 4 小时后,我得到“Sun Nov 01 2015 00:00:00 GMT-0400”。预期结果为“Sun Nov 01 2015 00:00:00 GMT-0500”,因为夏令时于 2015 年 11 月 1 日结束。

在测试时将您的本地机器时区设置为 (UTC-05:00) 东部时间(美国和加拿大)。

var date1 = moment('2015-10-31T20:00:00-04:00').toString();
console.log(date1)
output- Sat Oct 31 2015 20:00:00 GMT-0400

var convertedDate = moment($scope.date1).add('hours',4).toString();
console.log(convertedDate)
output- Sun Nov 01 2015 00:00:00 GMT-0400

Plunker : http://plnkr.co/edit/nF06r0YEjOk78F4QbtvF?p=preview

-吉米特

【问题讨论】:

    标签: momentjs dst


    【解决方案1】:

    “目前,夏令时从三月的第二个星期日开始 结束于 11 月的第一个星期日,随着时间的变化 地点在当地时间凌晨 2:00。”

    Daylight saving time in the UnitedStates.

    确实,您可以看到 5 到 6 小时轮班之间的夏令时变化。

    【讨论】:

    • 恕我直言,我不明白为什么这不是一个充分的答案。 OP 认为夏令时结束于 2015 年 11 月 1 日星期日 00:00:00 是理所当然的,而实际上,它在 2015 年 11 月 1 日星期日 02:00:00 结束。说明这一点,回答“[..]但是没有识别 DST 时区。”问题的一部分,对吧?
    • 我并没有试图批评 OP 的问题,我确定了他的困惑部分并提供了解决方案。
    • 感谢您强调它。它有帮助。将 Matt 的回复标记为答案,只是因为它帮助我用证据阐明了原因。
    • 您好 Sevle,感谢您的参与!虽然您的陈述是准确的,但它没有提供足够的上下文。仅说明有效时间并不能将普通读者的点联系起来。请记住,StackOverflow 主要是为可能遇到相同问题的其他人创建可重用的问题和答案资源,因此更加明确是值得的。否则,它更像是评论而不是答案。您可能还想阅读How do I write a good answer?
    【解决方案2】:

    几件事

    1. 请更新您的问题,以便在 StackOverflow 上显示您的代码。您应该只展示提出问题所必需的部分。

    2. 查看您在 Plunker 上的代码,您应该更喜欢使用 format 而不是 toString,但这不是问题的原因。

    3. 另外,您正在创建一个字符串只是为了再次解析它,这是低效的,有时会导致错误。虽然这也不是原因。

    4. 主要问题是您假设 DST 在美国东部时区午夜结束,而实际上它在凌晨 2:00 结束。时钟将从2015-11-01T01:59:59.999-04:00 提前一毫秒后2015-11-01T01:00:00.00-05:00

      Moment 可以处理得很好。

    请注意我突出显示的部分,由于 DST 回退,显示 1:00 小时随着偏移量的变化而重复。

    【讨论】:

    • 得到了马特。谢谢。
    猜你喜欢
    • 2017-03-24
    • 2011-01-23
    • 2019-05-06
    • 2016-10-08
    • 2017-03-10
    • 2019-04-06
    • 2015-06-07
    • 2013-03-05
    • 2016-09-01
    相关资源
    最近更新 更多