Ich möchte, dass der Server Daten immer in UTC im HTML bereitstellt und JavaScript auf der Client-Site in die lokale Zeitzone des Benutzers konvertiert.
Bonus, wenn ich im Gebietsschema-Datumsformat des Benutzers ausgeben kann.
Ich möchte, dass der Server Daten immer in UTC im HTML bereitstellt und JavaScript auf der Client-Site in die lokale Zeitzone des Benutzers konvertiert.
Bonus, wenn ich im Gebietsschema-Datumsformat des Benutzers ausgeben kann.
Der kinderleichteste Weg, um mit einem UTC-Datum zu beginnen, besteht darin, ein neues Date
Objekt zu erstellen und es mithilfe der setUTC…
Methoden auf das gewünschte Datum und die gewünschte Uhrzeit einzustellen.
Dann toLocale…String
liefern die verschiedenen Methoden eine lokalisierte Ausgabe.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
Funktionen nicht berücksichtigt .Verwenden Sie für neue Projekte einfach moment.js
Diese Frage ist ziemlich alt, daher gab es moment.js zu diesem Zeitpunkt noch nicht, aber für neue Projekte vereinfacht sie Aufgaben wie diese erheblich .
Am besten analysieren Sie Ihre Datumszeichenfolge von UTC wie folgt (erstellen Sie eine ISO-8601- kompatible Zeichenfolge auf dem Server, um konsistente Ergebnisse für alle Browser zu erhalten):
Verwenden
m
Sie jetzt einfach in Ihrer Anwendung moment.js standardmäßig die lokale Zeitzone für Anzeigevorgänge. Es gibt viele Möglichkeiten, Datums- und Uhrzeitwerte zu formatieren oder Teile davon zu extrahieren.Sie können sogar ein Momentobjekt im Gebietsschema des Benutzers wie folgt formatieren:
Um ein moment.js-Objekt in eine andere Zeitzone umzuwandeln (dh weder die lokale noch die UTC-Zeitzone), benötigen Sie die Zeitzonenerweiterung moment.js . Diese Seite hat auch einige Beispiele, es ist ziemlich einfach zu bedienen.
quelle
For old projects, just use jQuery
Sie können
new Date().getTimezoneOffset()/60
für die Zeitzone verwenden. Es gibt auch einetoLocaleString()
Methode zum Anzeigen eines Datums anhand des Gebietsschemas des Benutzers.Hier ist die ganze Liste: Arbeiten mit Daten
quelle
toLocaleString
?Nachdem Sie Ihr Datumsobjekt erstellt haben, finden Sie hier einen Ausschnitt für die Konvertierung:
Die Funktion verwendet ein UTC-formatiertes Datumsobjekt und eine Formatzeichenfolge.
Sie benötigen einen
Date.strftime
Prototyp.quelle
getTimezoneOffset()/60
möglicherweise einen Bruch zurückgibt (z. B. gibt ein Indien-Offset von +05: 30 5,5 zurück). Dezimalstellen werden abgeschnitten. Andernfalls werden durch das Einstellen der Stunden andere Werte aktualisiert (setzen Sie die Stunden auf 48 und sehen Sie, was passiert).In JS gibt es keine einfachen und plattformübergreifenden Möglichkeiten zum Formatieren der lokalen Datums- und Uhrzeitangabe, außer dass jede Eigenschaft wie oben erwähnt konvertiert wird.
Hier ist ein kurzer Hack, mit dem ich das lokale JJJJ-MM-TT erhalte. Beachten Sie, dass dies ein Hack ist, da das Enddatum nicht mehr die richtige Zeitzone hat (Sie müssen also die Zeitzone ignorieren). Wenn ich noch etwas brauche, benutze ich moment.js.
Das d.getTimezoneOffset () gibt den Zeitzonenversatz in Minuten zurück, und das d.getTime () ist in ms, daher x 60.000.
quelle
Folgendes habe ich in früheren Projekten verwendet:
quelle
getTimezoneOffset()/60
wird häufig ein Dezimalwert zurückgegeben. Dies gilt insbesondere für Daten vor 1900, bei denen viele Orte in Minuten und Sekunden versetzt waren. Außerdem sind jetzt Javascript-Daten erforderlich, um historische Offsets zu unterstützen. Beispielsweise betrug der Versatz in Moskau 1890 +2: 30: 17. Siehe Browser, Zeitzonen, Chrome 67-Fehler .Die
.getTimezoneOffset()
Methode gibt den Zeitzonenversatz in Minuten an und zählt "westwärts" von der GMT / UTC-Zeitzone, was zu einem Versatzwert führt, der negativ ist, wie man es normalerweise gewohnt ist. (Beispiel: Die New Yorker Zeit würde +240 Minuten oder +4 Stunden betragen.)Um einen normalen Zeitzonenversatz in Stunden zu erhalten, müssen Sie Folgendes verwenden:
Wichtiges Detail:
Beachten Sie, dass die Sommerzeit in das Ergebnis einbezogen wird - so , was diese Methode gibt Ihnen ist wirklich die Zeit versetzt - nicht die tatsächliche geographische Zeitzone gegenüber .
quelle
Mit Datum aus PHP-Code habe ich so etwas benutzt ..
Wir können es so nennen
quelle
Ich mische die bisherigen Antworten und füge sie hinzu, da ich sie alle lesen und eine Weile zusätzlich untersuchen musste, um eine Datums- / Zeitzeichenfolge von db im lokalen Zeitzonenformat eines Benutzers anzuzeigen.
Die datetime-Zeichenfolge stammt aus einer Python / Django-Datenbank im Format: 2016-12-05T15: 12: 24.215Z
Die zuverlässige Erkennung der Browsersprache in JavaScript scheint nicht in allen Browsern zu funktionieren ( Informationen zum Erkennen der Einstellungen für die Browsersprache finden Sie unter JavaScript ), daher erhalte ich die Browsersprache vom Server.
Python / Django: Sende die Sprache des Anforderungsbrowsers als Kontextparameter:
HTML: schreibe es in eine versteckte Eingabe:
JavaScript: Wert der versteckten Eingabe abrufen, z. B. en-GB, en-US; q = 0,8, en; q = 0,6 / und dann die erste Sprache in der Liste nur über Ersetzen und regulären Ausdruck übernehmen
JavaScript: In Datum / Uhrzeit konvertieren und formatieren:
Siehe: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Das Ergebnis ist (Browsersprache ist en-gb): 05/12/2016, 14:58
quelle
quelle
options
Teil für meinen Fall)Die beste Lösung, auf die ich gestoßen bin, besteht darin, [time display = "llll" datetime = "UTC TIME" /] -Tags zu erstellen und Javascript (jquery) zu verwenden, um es relativ zur Zeit des Benutzers zu analysieren und anzuzeigen.
http://momentjs.com/ Moment.js
wird die Zeit schön anzeigen.
quelle
Sie können Folgendes verwenden, das den Zeitzonenversatz von GMT in Minuten angibt:
Hinweis: - Diese Funktion gibt eine negative Zahl zurück.
quelle
getTimeZoneOffset () und toLocaleString eignen sich gut für die grundlegende Datumsarbeit. Wenn Sie jedoch echte Zeitzonenunterstützung benötigen, schauen Sie sich die TimeZone.js von mde an .
In der Antwort auf diese Frage werden einige weitere Optionen erläutert
quelle
Verwenden Sie die Methode toLocaleDateString (), um das Datum in das lokale Datum zu konvertieren.
Verwenden Sie die Methode toLocaleTimeString (), um die Zeit in die Ortszeit umzuwandeln.
quelle
Ich weiß nicht, wie man das Gebietsschema macht, aber Javascript ist eine clientseitige Technologie.
enthält die Uhrzeit und das Datum des Kunden (wie von seinem Browser und im weiteren Sinne von dem Computer, auf dem er sitzt) gemeldet. Es sollte trivial sein, die Zeit des Servers in die Antwort einzubeziehen und einige einfache Berechnungen durchzuführen, um den Versatz zu erraten.
quelle