Używam następującego kodu, aby przekonwertować datę po stronie serwera na czas lokalny przy użyciu momentu.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Ale dostaję:
Ostrzeżenie o wycofaniu: w momencie konstrukcja wraca do js Date. Jest to odradzane i zostanie usunięte w nadchodzącej wersji głównej. Więcej informacji można znaleźć pod adresem https://github.com/moment/moment/issues/1407 .
Wygląda na to, że nie mogę się tego pozbyć! Jak mogę to naprawić?
javascript
date
momentjs
dariush
źródło
źródło
Odpowiedzi:
Aby pozbyć się ostrzeżenia, musisz:
Przekaż wersję ciągu daty w formacie ISO:
moment('2014-04-23T09:54:51');
Przekaż ciąg, który masz teraz, ale powiedz Momentowi, w jakim formacie jest łańcuch:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Przekonwertuj swój ciąg na obiekt Date JavaScript, a następnie przekaż go do Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
Ostatnią opcją jest wbudowane rozwiązanie awaryjne, które na razie obsługuje Moment, z ostrzeżeniem o nieaktualnej konsoli. Mówią, że nie będą obsługiwać tego rozwiązania awaryjnego w przyszłych wersjach. Wyjaśniają, że używanie
new Date('my date')
jest zbyt nieprzewidywalne.źródło
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
prawidłowe? A może po prostu tłumię problem gotowy do cichego załamania się w najbliższej przyszłości?Invalid
wynikiem daty.Alternatywnie możesz wyłączyć wyświetlanie ostrzeżenia o wycofaniu, ustawiając
moment.suppressDeprecationWarnings = true;
źródło
// @ts-ignore
(przynajmniej w przypadku niektórych wersji strefy czasowej i @ types / moment-timezone).Konstrukcja daty w
moment
wewnętrznie używanew Date()
znaku w javascript.new Date()
Budowa rozpoznaje ciąg dat w obu dokument RFC2822 lub ISO formatów we wszystkich przeglądarkach. Podczas konstruowania plikumoment
obiektu z datą spoza tych formatów generowane jest ostrzeżenie o wycofaniu.Chociaż generowane są ostrzeżenia o wycofaniu, w przypadku niektórych formatów
moment
obiekt zostanie pomyślnie utworzony w przeglądarce Chrome, ale nie w przeglądarce Firefox lub Safari. Z tego powodu przetwarzanie daty w Chrome może dawać wyniki zgodnie z oczekiwaniami (nie zawsze) i rzucaćInvalid Date
w inne.Rozważ
02.02.2018
,Chrome -
moment("02.02.2018")._d
->Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
Firefox -
moment("02.02.2018")._d
->Invalid Date
Safari -
moment("02.02.2018")._d
->Invalid Date
Więc
moment.js
jest używany na własne ryzyko w przypadku, gdy nie są używane zalecane / standardowe formaty.Aby pominąć ostrzeżenia o wycofaniu ,
moment
budowie.Przykład:
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Przykład:
moment("2018-02-01T18:30:00.000Z")
- Format ISOmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- Format RFC2822 - Formatuj w serwisie Githubmoment.suppressDeprecationWarnings = true;
Proponuję za chwilę nadpisać rezerwę wejścia.
Ponieważ (3) pominie wszystkie ostrzeżenia, (4) pominie tylko rezerwę konstrukcji daty. Używając (4), otrzymasz,
Invalid Date
gdynew Date()
jest używany wewnętrzny, a inne przestarzałe funkcje można zobaczyć w konsoli, więc moment można zaktualizować lub zastąpić przestarzałe metody w aplikacji.źródło
Jeśli Twoja data jest przekazywana z interfejsu API jako
string
(jak mój problem), możesz użyć filtru, aby na chwilę przekonwertować ciąg na datę. To zadba o moment ostrzeżenia o budowie.Dodaj to do widoku:
źródło
Jak wskazano w powyższych odpowiedziach. Podanie formatu daty powinno działać.
Dlaczego miałbym otrzymywać komunikat o wycofaniu z następującym wierszem kodu. Wydawało mi się, że format String + miał rozwiązać ten problem.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. Ponadto, proszę, nie mam kontroli nad udostępnianym formatem daty. Wiem, że mogę go samodzielnie przekonwertować, aby'YYYY-MM-DDTHH:mm:ss'
wtedy moment nie wyświetlał komunikatu o zaniechaniu. Jednak zgodnie z dokumentacją linia kodu powinna działać. Oto komunikat o wycofaniu, który widzę.źródło