Mój komputer lokalny w strefie czasowej EST.

Próbuję przekonwertować ciąg daty na obiekt daty w js, ale otrzymuję dzień wcześniej od ciągu daty w obiekcie daty.

new Date('2020-04-03') za to otrzymuję Thu Apr 02 2020 20:00:00 GMT-0400 (Eastern Daylight Time) to wyjście.

new Date('2020/04/03') za to otrzymuję Fri Apr 03 2020 00:00:00 GMT-0400 (Eastern Daylight Time) to wyjście.

console.log(new Date('2020-04-03'))
console.log(new Date('2020/04/03'))

Nie wiem, jaka jest różnica między tymi, czy ktoś może to wyjaśnić?

Jak rozwiązać ten problem?

3
Ranjith U K 2 kwiecień 2020, 05:58

4 odpowiedzi

Najlepsza odpowiedź

Powodem, dla którego dwie analizy dat dają różne wyniki, jest to, że wyzwalają dwa różne tryby obsługi dat.

W jednym przypadku, 2020-04-03, traktuje datę jako uproszczoną wersję ISO 8601, dla którego JavaScript tworzy datę w strefie czasowej UTC, jeśli nie określono żadnej strefy czasowej.

Druga data, 2020/04/03, nie ma oficjalnie obsługiwanego formatu, więc JavaScript powraca do analizy daty specyficznej dla implementacji, więc może nawet nie być spójna w różnych przeglądarkach. W takim przypadku wybiera lokalną strefę czasową.

Artykuł w MDN na Date.parse() oferuje szczegółowe wyjaśnienie, jak działa analizowanie dat w standardzie JavaScript i jak w niektórych przypadkach istnieją niestandardowe zachowania między przeglądarkami.

Krótko mówiąc, dobrym pomysłem jest trzymanie się dat ISO 8601, gdy tylko jest to możliwe, nie tylko dlatego, że JavaScript obsługuje je w spójny sposób, ale także łatwo je sortować i są szeroko obsługiwane w wielu systemach programowania.

2
Jacob 2 kwiecień 2020, 03:36

Domyślnie ciąg daty jest analizowany w strefie czasowej UTC. Kiedy wyświetlasz datę, domyślnie konwertuje ją na lokalną strefę czasową ustawioną przez przeglądarkę.

Aby rozwiązać problem, możesz wprowadzić swoją datę jako odpowiednik UTC lub po prostu zrobić tak, jak podali inni tutaj i uwzględnić strefę czasową w ciągu daty

let date = new Date('2020-04-03 EST');
0
Asher Garland 2 kwiecień 2020, 03:22

Spróbuj new Date('2020-04-03 EST'), ponieważ możesz określić przesunięcie strefy czasowej.

let date = new Date('2020-04-03 EST');
console.log(date); // "2020-04-03T05:00:00.000Z"
0
Luís Ramalho 2 kwiecień 2020, 03:02

Wypróbuj new Date('2020-04-03 00:00:00')

0
Rajan 2 kwiecień 2020, 03:05