2015-10-21 5 views
6

Data otrzymane z serwera jest w UTC strefy czasowej i muszę konwertować je do konkretnej strefy czasowej, na przykład: America/New_York .Following jest kod dla samegokątowa Moment: Chwila czasowa nie ma danych dla Ameryki/New_York

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

ale w ten sposób pojawia się następujący błąd:

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

ale America/New_York jest znanym stref czasowych do moment ale nadal jest ona prosi mnie, aby dodać strefę czasową.

Odpowiedz

29

trzeba załadować wszystkie poniższe kryteria:

  • chwila
  • chwila czasowej
  • strefy czasowej dane dla chwila czasowej
  • kątowe-moment

Na stronie głównej moment-timezone dostępne są trzy różne dystrybucje o f moment-strefa czasowa.

  • moment-timezone.js jest tylko skrypt. Nie zawiera danych strefy czasowej. Jeśli korzystasz z tej dystrybucji, oczekuje się, że pobierzesz własne dane strefy czasowej: moment.tz.add lub moment.tz.load, zgodnie z opisem w dokumentach.

  • moment-timezone-with-data.js zawiera wszystkie znane dane strefy czasowej z tz database, dla wersji wspomnianej na stronie internetowej.

  • moment-timezone-with-data-2012-2022.js zawiera te same dane TZ, ale jest skrócone do zaledwie roku 2012 przez 2022. Jest to znacznie mniejszy plik danych i jest wystarczająca dla większości aplikacji po stronie przeglądarki.

Istnieją również wersje minified każdej z nich.

Więc jeśli otrzymujesz "Moment Timezone has no data for America/New_York", ponieważ America/New_York jest prawidłowym identyfikatorem bazy danych TZ, to po prostu nie wczytałeś dla niego danych. Prawdopodobnie używasz moment-timezone.js bez dodawania do niego danych. Uwzględnij dane strefy czasowej z moment.tz.add lub (bardziej stosownie) przełącz się na jeden z plików, który zawiera już wszystkie dane strefy czasowej.

Jednak nie rób tego obu. Dane strefy czasowej powinny być ładowane tylko jeden raz, a skrypty ze scenami czasowymi powinny być ładowane tylko raz. Jeśli używasz albo moment-timezone-with-data.js lub moment-timezone-with-data-2012-2022.js, nie powinieneś używać moment-timezone.js, ponieważ ten skrypt jest już zawarty.

+0

W backend (express), nie "wymagają" js dla danych strefy czasowej i działa dobrze. Może być po stronie klienta musimy uzyskać te dane jawnie, jak wspomniano, poinformuje Cię, jeśli to działa. –

+2

Świetne !! Zadziałało. Otrzymano komunikat "Moment Timezone 0.4.0 był już załadowany bez żadnych danych", a następnie dokładnie przeczytaj odpowiedź, a ostatnie dwie ostatnie linie rozwiązały zagadkę :) –

+1

Dziękujemy za komentarz @AmanGupta. Nie używaj obu!(Strefa czasowa i dane) skrypty, to lekcja, której się nauczyłem. – paqogomez

Powiązane problemy