2017-05-11 1 views
1

Zu wissen, dass meine Zeitzone ist GMT + 2 Betrachten Sie den folgenden Code:Warum gibt new Date (dateString) zwei verschiedene Daten auf verschiedenen Geräten mit genau der gleichen Eingabe zurück?

  • Auf einem Telefon 4G Selfy Laufen:

    myDate = "2017-05-12T09:00:00"; 
    dateFoo = new Date(myDate); // Fri May 12 2017 11:00:00 GMT+0200 (CEST) 
    
  • auf einem Galaxy S7 Rennen:

    myDate = "2017-05-12T09:00:00"; 
    dateFoo = new Date(myDate); // Fri May 12 2017 09:00:00 GMT+0200 (CEST) 
    

Warum gibt es eine Inkonsistenz in den Ausgaben und wie würde ich über solvi gehen ng es?

Meine Frage unterscheidet sich von anderen ähnlichen Fragen (wie Why does Date.parse give incorrect results?), weil ich in meinem Fall die exakt gleiche Zeichenfolge verwende und es die Geräte sind, die sich unterscheiden.

+1

Eine weitere mögliche Betrogene: http://stackoverflow.com/q/6427204/5743988 – 4castle

+0

Ich glaube nicht, das ist ein Duplikat dieser Fehler @ 4castle - die Daten in dieser Frage aussehen wie wohlgeformt ISO Daten, wenn auch ohne explizite Zeitzone. – Pointy

+1

@Pointy Die Eingabe kann wohlgeformt sein, aber die Implementierung des Parsers "Datum" ist nicht standardisiert. Grund genug für jede Inkonsistenz. – 4castle

Antwort

0

Das anfängliche Problem war, dass Date.parse auf einem Gerät meine lokale Zeit als die Zeitzone nahm, während auf dem anderen Gerät UTC dauerte.

Durch Hinzufügen eines Z am Ende meiner ursprünglichen dateString, erzwang ich das Datum immer als UTC betrachtet werden, egal was das Gerät, daher konsistente Ergebnisse mit Date.parse() zu erzielen.

Um dann das Datum in meiner Ortszeit zu bekommen, habe ich die Antwort auf diese Frage verwendet: https://stackoverflow.com/a/1486612/1875581.

+0

Ich empfehle nicht, dass Sie dies als dauerhafte Lösung verwenden. Es wurde gesagt [viele] (http://stackoverflow.com/a/6427318/5743988) [mal] (http://stackoverflow.com/a/2587398/5743988) [vorher] (https: //developer.mozilla .org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/Datum/Parse), dass das Parsing mit 'new Date' oder' Date.parse' aufgrund von inkonsistenten Browserimplementierungen bis ES6 schlecht ist. Es wird empfohlen, eine Parsing-Bibliothek von Drittanbietern zu verwenden, wenn Sie konsistente Ergebnisse erzielen möchten. (Wie zum Beispiel [moment.js] (https://momentjs.com/)). – 4castle

+0

Danke, in meinem Fall gibt es eine große Auswahl an Geräten, also werde ich mich auf jeden Fall mal.js ansehen. – edoreld

+0

Appending Z ist eine schlechte Idee. "2017-05-12T09: 00: 00" ** sollte ** als lokal geparst werden, aber das Anhängen eines Z wird es als UTC analysieren. Die untere Zeile verwendet niemals den integrierten Parser, sondern eine Funktion oder Bibliothek. Die verknüpfte Antwort ([* JSON Stringify ändert die Uhrzeit aufgrund von UTC *] (http://stackoverflow.com/questions/1486476/json-stringify-changes-time-of-date-because-of-utc/1486612# 1486612)) ist falsch. – RobG

0

Diff in Ihrem Datum ist wegen der Zeitzone. Sie können versuchen, Datum in UTC-Datum zu konvertieren, um ein perfektes Ergebnis zu erhalten.

myDate = "2017-05-12T09:00:00"; 
    dateFoo = new Date(myDate).toUTCString(); 
+0

"2017-05-12T09: 00: 00" ist ** nicht ** UTC. – RobG

+0

Ja, ich weiß, dass dies nicht UTC ist, ich werde nur diese "2017-05-12T09: 00: 00" Zeichenfolge in UTC Formate konvertieren – Jay

Verwandte Themen