【问题标题】:Convert a specific date and time between locations using Moment.js version 2.0.0+使用 Moment.js 版本 2.0.0+ 转换位置之间的特定日期和时间
【发布时间】:2017-10-17 23:47:40
【问题描述】:

如何使用 Moment.js 2.0.0+ 将代表纽约、纽约日期和时间的日期时间字符串更改为澳大利亚墨尔本?


我在 StackOverflow 上找到的其他答案已经过时或与我的用例略有不同。

convert this string '2016-04-28 09:30:00' to its Melbourne Australia equivalent 

【问题讨论】:

    标签: date timezone momentjs


    【解决方案1】:

    我找到的解决方案贴在下面

    设置要转换的时区

    moment.tz.setDefault('America/New_York');
    

    使用日期和时间以及日期格式创建时刻对象设置时区日期

    var ny = moment('2016-04-28 09:30:00','YYYY-MM-DD HH:mm:ss').tz('America/New_York');
    

    克隆原始的时间和日期,然后更改时区

    var mel = ny.clone().tz('Australia/Melbourne');
    

    使用 .format() 函数在控制台中查看日期

    mel.format('YYYY-MM-DD HH:mm:ss')
    

    【讨论】:

    • 请注意,moment-timezone 有一个 moment.tz 方法,可用于解析指定时区(因此您可以避免使用 moment.tz.setDefault)。查看示例here
    • 另外,您错误地解析了时间 - 使用 HH,而不是 hh。您可能想使用format 而不是toString。而且,如果您不将原始时刻用于其他任何事情,则克隆它是可选的。
    • @Matt Johnson 感谢您的更正和示例。我已选择您的答案作为解决方案,但会将我更正的答案保留为另一个,尽管更详细的解决方案供其他人参考。
    • @VincenzoC Matt Johnson 的回答显示了您的推荐示例,感谢您的反馈。
    【解决方案2】:

    简单地说:

    var s = moment.tz('2016-04-28 09:30:00',      // input date time string
                      'YYYY-MM-DD HH:mm:ss',      // format of input
                      'America/New_York')         // time zone of input
    
                  .tz('Australia/Melbourne')      // convert to another time zone
    
                  .format('YYYY-MM-DD HH:mm:ss'); // format output string
    

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2013-01-31
      • 2019-06-10
      • 2019-01-26
      • 2018-12-20
      • 1970-01-01
      相关资源
      最近更新 更多