Używam Moment.js do analizowania i formatowania dat w mojej aplikacji internetowej. Jako część obiektu JSON mój serwer zaplecza wysyła daty jako liczbę milisekund od epoki UTC (przesunięcie Unix).
Analizowanie dat w określonej strefie czasowej jest łatwe - po prostu dodaj identyfikator strefy czasowej RFC 822 na końcu ciągu przed analizowaniem:
// response varies according to your timezone
const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")
// problem solved, always "03/11 17:00"
const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")
console.log({ m1, m2 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Ale jak sformatować datę w określonej strefie czasowej ?
Chcę spójnych wyników niezależnie od aktualnego czasu przeglądarki, ale nie chcę wyświetlać dat w UTC.
javascript
timezone
momentjs
cicha mięta
źródło
źródło
DD MMM, YYYY
nie działa, kiedy go używammoment.tz("2018-02-15T14:20:00.000+0530", "Asia/Bangkok").format("DD MMM, YYYY")
. Czy ktoś może wskazać mi w dokumentacji, gdzie mogę znaleźć wszystkie klucze do formatowania czasu podczas korzystania z tego interfejsu API."15 Feb, 2018"
. Czy chodziło Ci o użycie ciągu formatuDD MMMM, YYYY
do pobrania"15 February, 2018"
?Odpowiedzi:
Jak wskazano w odpowiedzi Manto ,
.utcOffset()
jest to preferowana metoda od momentu 2.9.0. Ta funkcja używa rzeczywistego przesunięcia względem czasu UTC, a nie przesunięcia wstecznego (np. -240 dla Nowego Jorku podczas czasu letniego). Odsuwane ciągi, takie jak „+0400”, działają tak samo jak poprzednio:Starszy
.zone()
jako ustawiacz został wycofany w Moment.js 2.9.0. Zaakceptował ciąg zawierający identyfikator strefy czasowej (np. „-0400” lub „-04: 00” przez -4 godziny) lub liczbę reprezentującą minuty po czasie UTC (np. 240 dla Nowego Jorku podczas czasu letniego).Aby pracować z nazwanymi strefami czasowymi zamiast przesunięć numerycznych, uwzględnij strefę czasową momentu i użyj
.tz()
zamiast tego:źródło
.zone()
jako metody pobierającej, która zwraca minuty z UTC (np. Zwraca 300 dla Nowego Jorku w standardowym czasie)..tz("America/Phoenix")
jeśli dołączysz również momentjs.com/timezone . Zaktualizowałem odpowiedź na przykładzie.Użyj chwilowej strefy czasowej
Zanim uzyskasz dostęp do określonej strefy czasowej, musisz ją załadować w ten sposób (lub użyć alternatywnych metod opisanych tutaj )
źródło
Kilka odpowiedzi już wspomina, że strefa czasowa w chwili jest sposobem na przejście z nazwaną strefą czasową. Chcę tylko wyjaśnić coś o tej bibliotece, co było dla mnie dość zagmatwane. Istnieje różnica między tymi dwoma stwierdzeniami:
Zakładając, że strefa czasowa nie jest określona w terminie podanym w:
Pierwszy kod przyjmuje datę i zakłada, że strefa czasowa jest tą, która została przekazana. Drugi przyjmie datę, przyjmie strefę czasową z przeglądarki, a następnie zmieni godzinę i strefę czasową zgodnie z podaną strefą czasową.
Przykład:
Moja strefa czasowa to +5 od utc. Więc w pierwszym przypadku nie zmienia się i ustawia datę i godzinę tak, aby mieć strefę czasową utc.
W drugim przypadku zakłada, że przekazana data to -5, a następnie zamienia ją na UTC i dlatego wypluwa datę „2018-07-18T00: 00: 00Z”
UWAGA: parametr format jest naprawdę ważny. Jeśli zostanie pominięty moment, może wrócić do klasy Date, co może powodować nieprzewidywalne zachowania
Zakładając, że strefa czasowa jest określona w terminie podanym w:
W tym przypadku oboje zachowują się jednakowo
Chociaż teraz rozumiem, dlaczego to działa, pomyślałem, że to dość myląca funkcja i warta wyjaśnienia.
źródło
.zone () został uznany za przestarzały i zamiast tego należy użyć utcOffset:
źródło
Miałem ten sam problem z Moment.js. Zainstalowałem strefę czasową momentu, ale problem nie został rozwiązany. Następnie zrobiłem to, co tutaj jest ujawnione, ustawiłem strefę czasową i działa jak urok:
Wielkie dzięki!
źródło
new Date()
konstruktora. Moment zapewnia wszystko, czego kiedykolwiek potrzebujesz do przeanalizowania dat. Zobacz parsowanie dokumentów.new Date()
wewnętrznie), ale jest to niespójne w różnych przeglądarkach . Zamiast tego jako drugi argument należy użyć oczekiwanego formatu. Przykład:moment("12-25-1995", "MM-DD-YYYY")
.Właśnie to przyszło, a ponieważ miałem ten sam problem, po prostu opublikowałem wyniki, które wymyśliłem
podczas analizowania można zaktualizować przesunięcie (tj. analizuję dane (1.1.2014) i chcę mieć tylko datę 1 stycznia 2014 r. W GMT + 1 otrzymam 31.12.2013. Więc najpierw wyrównuję wartość.
Cóż, przydała mi się obsługa w różnych strefach czasowych
b
źródło
Możesz spróbować tego,
Tutaj możesz uzyskać datę w oparciu o strefę czasową klienta (przeglądarkę).
Wyrażenie regularne zasadniczo pobiera wartość przesunięcia.
Twoje zdrowie!!
źródło