Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular Moment : Moment Timezone has no data for America/New_York

Date received from server is in UTC timezone and I need to convert it to a particular timezone, for example : America/New_York .Following is the code for same

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

But on doing so I get the following error:

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

But America/New_York is a known timezone to moment but still it is asking me to add the Timezone.

like image 394
Aman Gupta Avatar asked Oct 21 '15 12:10

Aman Gupta


People also ask

How to pass timeZone in moment?

To change the default time zone, use moment.tz.setDefault with a valid time zone. moment.tz.setDefault("America/New_York"); To reset the default time zone to local, use moment.tz.setDefault with no arguments.

What is moment tz()?

For example, if you parse the string '2020/01/02' and then call the moment#tz() method, you're telling moment to parse the string in the locale time, and then convert the date to a given IANA timezone. // '20200101 21:00 PST' moment('2020/01/02', 'YYYY/MM/DD').


1 Answers

You need to load all of the following:

  • moment
  • moment-timezone
  • time zone data for moment-timezone
  • angular-moment

On the moment-timezone home page, there are available three different distributions of moment-timezone.

  • moment-timezone.js is just the script. It contains no time zone data. If you use this distribution, it's expected that you will pull in your own time zone data, either by moment.tz.add, or moment.tz.load, as described in the docs.

  • moment-timezone-with-data.js includes all known time zone data from the tz database, for the version mentioned on the web site.

  • moment-timezone-with-data-2012-2022.js includes the same tz data, but is truncated to just years 2012 through 2022. This is a much smaller data file, and is sufficient for the majority of browser-side applications.

There are minified versions of each as well.

So if you are getting "Moment Timezone has no data for America/New_York", since America/New_York is a valid TZ database identifier, then you simply haven't loaded the data for it. You are probably using moment-timezone.js without adding data to it. Either include time zone data with moment.tz.add, or (more appropriately) switch to one of the files that already includes all time zone data.

However, do not do both. Time zone data should only be loaded once, and the moment-timezone scripts should only be loaded once. If you use either moment-timezone-with-data.js or moment-timezone-with-data-2012-2022.js, you should not be using moment-timezone.js, as that script is already included.

like image 132
Matt Johnson-Pint Avatar answered Oct 16 '22 02:10

Matt Johnson-Pint