【问题标题】:Angular Moment : Moment Timezone has no data for America/New_YorkAngular Moment : Moment Timezone 没有 America/New_York 的数据
【发布时间】:2016-01-20 10:13:59
【问题描述】:

从服务器收到的日期在UTC 时区,我需要将其转换为特定时区,例如:America/New_York。以下是相同的代码

  <span class="bold" ng-bind="sess.date_time | amTimezone:'America/New_York' | amDateFormat:'h:mm a'"></span>

但是这样做我得到以下错误:

Moment Timezone has no data for America/New_York. See http://momentjs.com/timezone/docs/#/data-loading/.

America/New_Yorkmoment 的已知时区,但它仍然要求我添加时区。

【问题讨论】:

    标签: javascript angularjs timezone momentjs angular-moment


    【解决方案1】:

    您需要加载以下所有内容:

    • 时刻
    • 时刻-时区
    • 时区 数据 for moment-timezone
    • 角力矩

    moment-timezone主页上,提供了三种不同的moment-timezone分布。

    • moment-timezone.js 只是脚本。它不包含时区数据。如果您使用此发行版,预计您将通过moment.tz.addmoment.tz.load 提取您自己的时区数据,如文档中所述。

    • moment-timezone-with-data.js 包含来自tz database 的所有已知时区数据,适用于网站上提到的版本。

    • moment-timezone-with-data-2012-2022.js 包含相同的 tz 数据,但截断到 2012 年到 2022 年。这是一个小得多的数据文件,足以满足大多数浏览器端应用程序。

    每个都有缩小版本。

    所以如果你得到"Moment Timezone has no data for America/New_York",因为America/New_York 是一个有效的TZ 数据库标识符,那么你根本没有为它加载数据。您可能正在使用moment-timezone.js 而不向其中添加数据。使用moment.tz.add 包含时区数据,或者(更恰当地)切换到已包含所有时区数据的文件之一。

    但是,不要两者都做。时区数据应该只加载一次,而时刻时区脚本应该只加载一次。如果您使用moment-timezone-with-data.jsmoment-timezone-with-data-2012-2022.js,则不应使用moment-timezone.js,因为该脚本已包含在内。

    【讨论】:

    • 在后端(快递)中,我没有为时区数据“要求”js,它工作正常。可能是对于客户端,我们需要如您提到的那样明确获取此数据,如果可行,我们会通知您。
    • 太棒了!!有效。收到“Moment Timezone 0.4.0 has been loaded without any data”错误,然后仔细重新阅读您的答案,最后两行解决了这个谜团:)
    • 感谢您的评论@AmanGupta。不要同时使用! (时区和数据)脚本,是这里学到的教训。
    • 根据moment docs,“在 Node.js 中,所有数据都是预加载的。加载数据不需要额外的代码。”这就是您开始使用服务器所需的全部内容:var moment = require('moment-timezone');moment().tz("America/Los_Angeles").format();
    • @JoshuaDyck 是的,但问题是关于浏览器,而不是 Node。
    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2014-08-15
    • 1970-01-01
    • 2018-02-10
    • 2016-12-06
    相关资源
    最近更新 更多