18

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

4

1 回答 1

62

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

  • 片刻
  • 时刻时区
  • 时刻时区的时区数据
  • 角力矩

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

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

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

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

每个都有缩小版本。

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

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

于 2015-10-21T15:55:16.587 回答