Jak przekonwertować ciąg na datę w JavaScript?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
javascript
date
type-conversion
date-parsing
jslearner
źródło
źródło
Date -> String
czyString -> Date
?Odpowiedzi:
Najlepszym formatem ciągów do analizowania ciągów jest format daty ISO wraz z konstruktorem obiektów JavaScript Date.
Przykłady formatu ISO:
YYYY-MM-DD
lubYYYY-MM-DDTHH:MM:SS
.Ale poczekaj! Samo użycie „formatu ISO” samo w sobie nie działa niezawodnie. Ciągi są czasami analizowane jako UTC, a czasem jako czas lokalny (na podstawie dostawcy przeglądarki i wersji). Najlepszą praktyką powinno być zawsze przechowywanie dat jako UTC i wykonywanie obliczeń jako UTC.
Aby parsować datę jako UTC, dołącz Z - np
new Date('2011-04-11T10:20:30Z')
. :Aby wyświetlić datę w UTC, użyj
.toUTCString()
,aby wyświetlić datę w czasie lokalnym użytkownika, użyj
.toString()
.Więcej informacji na temat MDN | Data i ta odpowiedź .
W przypadku starej zgodności z programem Internet Explorer (wersje IE mniejsze niż 9 nie obsługują formatu ISO w Konstruktorze daty), należy podzielić reprezentację ciągu datetime na jego części, a następnie można użyć konstruktora, używając części datetime, np
new Date('2011', '04' - 1, '11', '11', '51', '00')
. : Pamiętaj, że liczba miesięcy musi być o 1 mniejsza.Metoda alternatywna - użyj odpowiedniej biblioteki:
Możesz także skorzystać z biblioteki Moment.js, która umożliwia analizowanie daty w określonej strefie czasowej.
źródło
new Date('2011-04-11T11:51:00')
data utworzenia jest ważna.new Date('1970-30-02')
jest nieważny, ponieważ nie ma 30 miesięcy w roku. Nie możesz przepełnić miesięcy, ale gdy przepełnisz dni, to w Chrome i Firefox jest to ważna data:new Date('1970-02-30')
jest to ten sam dzień, co nowa data („1970-03-02”).Niestety dowiedziałem się o tym
zwraca „Środa 02 kwietnia 2014”. Wiem, że to brzmi szalenie, ale zdarza się, że niektórzy użytkownicy.
Roztwór kuloodporne jest następujący:
źródło
yyyy-MM-dd
są analizowane jako UTC, a toString zwraca czas lokalny, dlatego w zależności od strefy czasowej użytkownika może zdecydowanie zwrócić różne wyniki. Jeśli zawsze chcesz mieć czas UTC, powinieneś użyć toUTCString .Wyjście będzie:
źródło
źródło
.indexOf()
metodzie, ponieważ nie jest kompatybilna z wieloma przeglądarkami bez polyfils. Zamiast tego użyj bardziej zgodnych.match()
lub.test()
waniliowych metod JS.var _delimiter = _format.match(/\W/g)[0];
na początku funkcji można uzyskać separator automatycznie i oddzielić trzeci parametr.moment.js ( http://momentjs.com/ ) to kompletny i dobry pakiet dla dat użycia i obsługuje ciągi ISO 8601 .
Możesz dodać datę i format ciągu.
I możesz sprawdzić, czy data jest ważna.
Niektóre przykłady wyświetlania
Zobacz dokumentację http://momentjs.com/docs/#/parsing/string-format/
źródło
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
: „3 miesiące temu | 1 lutego 2019 r.”Przekaż jako argument do Date ():
Można uzyskać dostęp datę, miesiąc, rok, stosując na przykład:
dt.getMonth()
.źródło
console.log(new Date('30-08-2018'))
i otrzymuję niepoprawną datę01/02/2020
mojego komputera (w Wielkiej Brytanii), zwróci 1 lutego, a jeśli to samo dzieje się w Stanach Zjednoczonych, zwróci 2 stycznia. Prawie nigdy nie powinieneś używać tej naiwnej implementacji. Zamiast tego użyj chwili .Jeśli możesz skorzystać ze wspaniałej biblioteki momentów (np. W projekcie Node.js), możesz łatwo przeanalizować datę, używając np.
i może uzyskać dostęp do obiektu daty JS za pośrednictwem
źródło
new Date(2000, 10, 1)
da ci „Śro 01 listopada 2000 00:00:00 GMT + 0100 (CET)”Zobacz, że 0 za miesiąc daje ci styczeń
źródło
Dla tych, którzy szukają małego i inteligentnego rozwiązania:
Przykład:
źródło
Właśnie
new Date(st);
Zakładając, że jest to właściwy format .
źródło
Jeśli chcesz przekonwertować z formatu „dd / MM / rrrr”. Oto przykład:
To rozwiązanie działa w wersjach IE mniejszych niż 9.
źródło
Znaczniki czasu należy rzutować na liczbę
źródło
undefined
wartością? Jak:var date = new Date(undefined)
?Date.parse
prawie dostaje to, czego chcesz. Dusi się na częściam
/pm
, ale przy pewnym hakowaniu możesz go uruchomić:źródło
Konwertuj na format pt-BR:
Mam nadzieję, że komuś pomogę !!!
źródło
Stworzyłem do tego skrzypce, możesz użyć funkcji toDate () na dowolnym ciągu daty i podać format daty. Spowoduje to zwrócenie obiektu Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
źródło
Do konwersji ciągów do tej pory w js używam
http://momentjs.com/
źródło
Zrobiłem tę funkcję, aby przekonwertować dowolny obiekt Date na obiekt Date UTC.
źródło
Jeszcze inny sposób na zrobienie tego:
źródło
Możesz spróbować:
źródło
lub
Ciąg daty w formacie „01-01-1970” nie będzie działał w FireFox, więc lepiej użyć „/” zamiast „-” w ciągu formatu daty.
źródło
Jeśli musisz sprawdzić zawartość ciągu przed konwersją do formatu daty:
źródło
Utworzyłem funkcję parseDateTime, aby przekonwertować ciąg na obiekt daty i działa on we wszystkich przeglądarkach (w tym w przeglądarce IE), sprawdź, czy ktoś jest wymagany, odwołanie https://github.com/Umesh-Markande/Parse-String-to-Date we wszystkich przeglądarkach
źródło
Ta odpowiedź opiera się na odpowiedzi Kassem, ale obsługuje również dwucyfrowe lata. Przesłałem poprawkę do odpowiedzi Kassem, ale jeśli nie została zaakceptowana, przesyłam ją również jako osobną odpowiedź.
źródło
Możesz użyć wyrażenia regularnego, aby przeanalizować ciąg znaków do szczegółów czasu, a następnie utworzyć datę lub dowolny format zwracany, taki jak:
źródło
Wydajność
Dzisiaj (2020.05.08) Wykonuję testy dla wybranych rozwiązań - dla dwóch przypadków: data wejściowa to ciąg ISO8601 (Ad, Bd, Cd, Dd, Ed), a data wejściowa to znacznik czasu (At, Ct, Dt). Rozwiązania Bd, Cd, Ct nie zwracają obiektu js Date jako wyników, ale dodaję je, ponieważ mogą być przydatne, ale nie porównuję ich z prawidłowymi rozwiązaniami. Te wyniki mogą być przydatne do masowej analizy dat.
Wnioski
new Date
(reklama) jest 50-100 razy szybsze niż moment.js (Dd) we wszystkich przeglądarkach pod kątem daty i znacznika czasu ISOnew Date
(reklama) jest ~ 10 razy szybsze niżparseDate
(Ed)Date.parse
(Bd) jest najszybsze, jeśli musimy pobrać znacznik czasu od daty ISO we wszystkich przeglądarkachDetale
Przeprowadzam test na MacOs High Sierra 10.13.6 na Chrome 81.0, Safari 13.1, Firefox 75.0. Rozwiązanie
parseDate
(Ed) używanew Date(0)
i ręcznie ustawia składniki daty UTC.Pokaż fragment kodu
Wyniki dla chrome
źródło
Datasceny w formacie ISO 8601, tak doskonałe jak standard, nadal nie są szeroko obsługiwane.
Jest to świetny zasób, aby dowiedzieć się, jakiego formatu danych należy użyć:
http://dygraphs.com/date-formats.html
Tak, oznacza to, że twoje przesyłanie danych może być tak proste, jak w przeciwieństwie do
"2014/10/13 23:57:52"
zamiast"2014-10-13 23:57:52"
źródło
źródło
użyj tego kodu: (mój problem został rozwiązany za pomocą tego kodu)
}
źródło
Napisałem funkcję wielokrotnego użytku, której używam, gdy otrzymuję ciągi dat z serwera.
możesz podać żądany separator (/ - itp.), który oddziela dzień miesiąc i rok, aby użyć tej
split()
metody.możesz to zobaczyć i przetestować na tym działającym przykładzie .
źródło
Jeszcze innym sposobem jest zbudowanie wyrażenia regularnego z nazwanymi grupami przechwytywania na ciągu formatu, a następnie użycie tego wyrażenia do wyodrębnienia dnia, miesiąca i roku z ciągu daty:
źródło