【问题标题】:Moment with Timezone not properly formatting date时区的时刻没有正确格式化日期
【发布时间】:2015-06-09 07:25:41
【问题描述】:

我正在尝试使用 Moment with Timezones 格式化 2014-10-03T23:09:42.764Z,以便我可以正确地向应用程序的用户显示它。但是,无论我在 Moment 中输入什么时区,它仍然会继续显示当前语言环境的时区:(我在 EST)

moment('2014-10-03T23:09:42.764Z').tz('Europe/Paris').format()
"2014-10-03T19:09:42-04:00"
moment('2014-10-03T23:09:42.764Z').tz('Europe/London').format()
"2014-10-03T19:09:42-04:00"

即使我同时输入了伦敦和巴黎,它仍然以我当前的时区显示。有没有办法强制 Moment 在给定的时区显示?

【问题讨论】:

    标签: momentjs


    【解决方案1】:

    您的代码看起来是正确的,并且在时刻时区网站上的 Chrome 开发工具调试器控制台中进行测试时可以正常工作:

    这是一个有效的 sn-p:

    var a = moment('2014-10-03T23:09:42.764Z').tz('Europe/Paris').format();
    var b = moment('2014-10-03T23:09:42.764Z').tz('Europe/London').format();
    
    document.getElementById("a").innerHTML = a;
    document.getElementById("b").innerHTML = b;
    <script src="http://momentjs.com/downloads/moment.min.js"></script>
    <script src="http://momentjs.com/downloads/moment-timezone-with-data-2010-2020.min.js"></script>
    <div id="a"></div>
    <div id="b"></div>

    我只能断定你没有正确加载时刻-时区数据。

    【讨论】:

    • 就是这样!我没有意识到(并且在更彻底地阅读后看到)我需要包含 moment-timezone-with-data 而不仅仅是 moment-timezone 文件。感谢您的帮助!
    【解决方案2】:

    你应该试试这样的:

    var m = moment.tz('2014-10-03T23:09:42.764Z', 'America/Toronto');    
    m.tz("Europe/Paris").format();
    

    在您的帖子中设置默认时区:

    var date = moment('2014-10-03T23:09:42.764Z')
    

    看来,日期对象中没有默认时区信息。

    您可以查看官方documentation了解更多详情。

    希望对你有帮助

    【讨论】:

    • 时间戳已经有一个时区,我希望按名称在不同的时区显示它。
    • 对不起,我编辑了我的帖子以照顾您的评论。
    • moment.tz(timestamp,timezone)moment.tz(timezone) 之间存在差异。第一个解析相对于提供的时区的原始时刻,并在时间戳不包含偏移量时使用。第二个用于将现有时间戳转换到指定的时区。由于原始时间戳已包含Z,因此已将其解析为 UTC。 OP的代码是正确的。
    • 谢谢你,马特,我不知道这件事:我试图帮助,最后你帮助我更多。我投了赞成票
    • 能否请您在帖子中注明您的评论,这对于 josh 问题非常重要。我将删除我的帖子,因为它不相关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多