851 Stimmen

Wie konvertiert man ein Datum in UTC?

Angenommen, ein Benutzer Ihrer Website gibt einen Datumsbereich ein.

2009-1-1 to 2009-1-3

Sie müssen dieses Datum zur Verarbeitung an einen Server senden, aber der Server erwartet, dass alle Datums- und Zeitangaben in UTC sind.

Nehmen wir nun an, der Benutzer befindet sich in Alaska. Da er sich in einer von der UTC abweichenden Zeitzone befindet, muss der Datumsbereich in etwa so umgerechnet werden:

2009-1-1T8:00:00 to 2009-1-4T7:59:59

Verwendung des JavaScript Date Objekt, wie würden Sie den ersten "lokalisierten" Datumsbereich in etwas umwandeln, das der Server versteht?

729voto

DrunkCoder Punkte 7453

Einfach und dumm

var date = new Date(); 
var now_utc =  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
 date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

 return new Date(now_utc);

585voto

Will Stern Punkte 16443

があります。 toISOString() Methode gibt eine Zeichenkette in der vereinfachten erweiterten ISO Format ( ISO 8601 ), die immer 24 oder 27 Zeichen lang ist ( YYYY-MM-DDTHH:mm:ss.sssZ o ±YYYYYY-MM-DDTHH:mm:ss.sssZ , bzw.). Die Zeitzone ist immer Null UTC Offset, wie durch das Suffix " Z ".

Quelle: MDN-Webdokumente

Das von Ihnen benötigte Format wird mit dem .toISOString() Methode. Für ältere Browser (ie8 und darunter), die diese Methode nicht nativ unterstützen, kann das Shim wie folgt gefunden werden aquí :

So haben Sie die Möglichkeit, das zu tun, was Sie brauchen:

var isoDateString = new Date().toISOString();
console.log(isoDateString);

Für Zeitzonenarbeit, moment.js und moment.js Zeitzone sind wirklich unschätzbare Werkzeuge ... vor allem für die Navigation von Zeitzonen zwischen Client und Server-Javascript.

263voto

Gras Double Punkte 14944

Hier ist meine Methode:

var now = new Date();
var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);

Das Ergebnis utc Objekt ist nicht wirklich ein UTC-Datum, sondern ein lokales Datum, das an die UTC-Zeit angepasst ist (siehe Kommentare). In der Praxis erfüllt es jedoch seine Aufgabe.

38voto

RollerCosta Punkte 4712

Konvertierung in ISO ohne Änderung von Datum/Uhrzeit

var now = new Date(); // Fri Feb 20 2015 19:29:31 GMT+0530 (India Standard Time) 
var isoDate = new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();
//OUTPUT : 2015-02-20T19:29:31.238Z

Konvertierung in ISO mit Änderung von Datum/Uhrzeit (Datum/Uhrzeit wird geändert)

isoDate = new Date(now).toISOString();
//OUTPUT : 2015-02-20T13:59:31.238Z 

Fiddle-Link

0 Stimmen

Das ist also eine Art von gefälschtem UTC? Ich verschiebe mein lokales Datum und es gelingt mir, dem Server das Datum und die Uhrzeit zu übermitteln, die ich tatsächlich auf meiner PC-Uhr sehe. Wahnsinn. Auf jeden Fall besser als Strinifying und Parsing

0 Stimmen

Sie brauchen auch nicht .toISOString(), Sie können einfach isoDate an den Server senden

0 Stimmen

.toISOString() ist einfach und geradlinig, das Abrufen des Datums wird ein zusätzlicher Schritt sein (isoDate ist keine Funktion).

30voto

CMcClymont Punkte 508

Eine andere Lösung ist die Konvertierung in UTC und die Beibehaltung als Datumsobjekt: (Es funktioniert, indem man den ' GMT'-Teil am Ende des formatierten Strings entfernt und ihn dann wieder in den Date-Konstruktor einfügt)

var now = new Date();
var now_utc = new Date(now.toUTCString().slice(0, -4));
console.log(now_utc)

Ich musste dies tun, um eine Schnittstelle mit einer Datetime-Picker-Bibliothek. Aber im Allgemeinen ist es eine schlechte Idee, mit Daten auf diese Weise zu arbeiten.

Benutzer möchten im Allgemeinen mit Datumsangaben in ihrer Ortszeit arbeiten. Daher aktualisieren Sie entweder den serverseitigen Code, um Datumsangaben mit Offsets korrekt zu parsen, und konvertieren dann in UTC (beste Option), oder Sie konvertieren clientseitig in eine UTC-Zeichenkette, bevor Sie sie an den Server senden (wie in Die Antwort von Will Stern )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X