Angular Moment:Moment Timezone没有America / New_York的数据

时间:2015-10-21 12:07:46

标签: javascript angularjs timezone momentjs angular-moment

从服务器收到的日期位于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的已知时区,但它仍然要求我添加时区。

1 个答案:

答案 0 :(得分:46)

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

  • 矩时区
  • 时区数据 for 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脚本只应加载一次。如果您使用moment-timezone-with-data.jsmoment-timezone-with-data-2012-2022.js,则不应使用moment-timezone.js,因为该脚本已包含在内。