Sie sagen:
Zeit UTC-Zeit wird das Zurücksetzen aber Zeitzone kommt noch als GMT + 0530 (Indien Standard Time). Gibt es einen sicheren Schuss Ansatz um Millisekunden in UTC-Zeitzone mit UTC-Zeitzone zu konvertieren?
Aber ich denke, Sie missverstehen, was vorkommt. Wenn Sie eine Nummer an den Date-Konstruktor als Pass in:
new Date(1465171200000)
ist davon ausgegangen, es Millisekunden seit der ECMAScript Epoche sein (1970-01-01T00: 00: 00Z), so ein Date-Objekt mit diesem Wert erstellt wird als sein interner Zeitwert. Datumsobjekte sind also inhärent UTC.
Wenn Sie das in eine Zeichenfolge schreiben, wird intern eine vom Menschen lesbare Datumszeichenfolge basierend auf der Zeitzoneneinstellung des Hosts generiert. Aus diesem Grund sehen Sie ein Datum für GMT + 0530 (das ist die Zeitzoneneinstellung Ihres Hostsystems). Das Date-Objekt selbst hat keine Zeitzone, es ist immer UTC.
Wenn Sie dann UTC Werte verwenden, um ein „lokales“ Datum erstellen mit:
new Date(tempDate.getUTCFullYear(), tempDate.getUTCMonth(), ...)
dann wird die Host-Zeitzone einer UTC Zeitwert entspricht ein „lokales“ Datum für die zugehörigen Werte zu erzeugen, verwendet. Sie haben Ihren Zeitzonen-Offset effektiv vom ursprünglichen Zeitwert abgezogen, sodass er jetzt einen anderen Zeitpunkt darstellt. Sie können genau das gleiche Ergebnis erhalten:
var d = new Date(1465171200000);
d.setMinutes(d.getMintues() + d.getTimezoneOffset());
was nur ein bisschen deutlicher zeigt, was vor sich geht. Beachten Sie, dass ECMAScript-Zeitzonen-Offsets in Minuten und entgegengesetzt zu UTC sind, dh sie sind negativ (-) für Ost und positiv (+) für West. Also ein Offset von UTC + 05: 30 wird als -330 dargestellt und Sie müssen es hinzufügen, um ein Datum zu "verschieben" anstatt es zu subtrahieren.
var tempDate = new Date(1465171200000);
var _utcDate = new Date(tempDate.getUTCFullYear(), tempDate.getUTCMonth(), tempDate.getUTCDate(), tempDate.getUTCHours(), tempDate.getUTCMinutes(), tempDate.getUTCSeconds());
console.log('Direct conversion to Date\ntempDate: ' + tempDate.toString());
console.log('Adjusted using UTC methods\n_utcDate: ' + _utcDate.toString());
tempDate.setMinutes(tempDate.getMinutes() + tempDate.getTimezoneOffset());
console.log('Adjusted using timezoneOffset\ntempDate: ' + tempDate.toString());
Allerdings kann ich nicht verstehen, warum Sie das oben genannte tun wollen. 1465171200000
stellt einen bestimmten Zeitpunkt dar (2016-06-06T00: 00: 00Z). Wenn Sie ihn für jede Client-Zeitzone anpassen, bedeutet dies, dass er für jeden Client mit einem anderen Zeitzonen-Offset einen anderen Zeitpunkt darstellt.
Warum machen Sie zwei Datums Objekte? Um die UTC-Datumszeichenfolge zu erhalten, verwenden Sie 'tempDate.toUTCString()' – evolutionxbox
@evolutionxbox - Tatsächlich konvertiert tempDate.toUTCString() das Datumsobjekt in eine Zeichenkette und kann keine weiteren Datumsoperationen ausführen. –