Konvertiere die UTC-Epoche in das lokale Datum

Ich kämpfe jetzt schon ein bisschen. Ich versuche, Epoche in ein Datumsobjekt umzuwandeln. Die Epoche wird mir in UTC gesendet. Immer wenn Sie eine new Date() -Epoche übergeben, nimmt sie ihre lokale Epoche an. Ich habe versucht, ein UTC-Objekt zu erstellen, dann setTime() , um es an die richtige Epoche anzupassen, aber die einzige Methode, die nützlich scheint, ist toUTCString() und Strings helfen mir nicht. Wenn ich diese Zeichenfolge an ein neues Datum übergebe, sollte es bemerken, dass es UTC ist, aber das tut es nicht.

 new Date( new Date().toUTCString() ).toLocaleString() 

Mein nächster Versuch war, zu versuchen, den Unterschied zwischen lokaler gegenwärtiger Epoche und gegenwärtiger UTC-Epoche zu bekommen, aber ich konnte das auch nicht bekommen.

 new Date( new Date().toUTCString() ).getTime() - new Date().getTime() 

Es gibt mir nur sehr kleine Unterschiede, unter 1000, was in Millisekunden ist.

Irgendwelche Vorschläge?

Ich denke, ich habe eine einfachere Lösung – setze das Anfangsdatum auf die Epoche und füge UTC-Einheiten hinzu. Angenommen, Sie haben eine UTC-Epoche in Sekunden gespeichert. Wie wäre es mit 1234567890 . So konvertieren Sie das Datum in die lokale Zeitzone:

 var utcSeconds = 1234567890; var d = new Date(0); // The 0 there is the key, which sets the date to the epoch d.setUTCSeconds(utcSeconds); 

d ist jetzt ein Datum (in meiner Zeitzone) eingestellt auf Fri Feb 13 2009 18:31:30 GMT-0500 (EST)

Es ist einfach, new Date() dauert nur Millisekunden, z

 new Date(1394104654000) > Thu Mar 06 2014 06:17:34 GMT-0500 (EST) 

Und nur für die Protokolle habe ich das mit der Moment.js- Bibliothek getan , die ich sowieso zum Formatieren verwendet habe.

 moment.utc(1234567890000).local() >Fri Feb 13 2009 19:01:30 GMT-0430 (VET) 

Die date.getTime() ist in Sekunden seit dem 1. Januar 1970. date.getTime() gibt Millisekunden vom 1. Januar 1970 zurück. Wenn Sie also einen Epochenzeitstempel haben, wandeln Sie ihn in einen Javascript-Zeitstempel um, indem Sie mit 1000 multiplizieren.

  function epochToJsDate(ts){ // ts = epoch timestamp // returns date obj return new Date(ts*1000); } function jsDateToEpoch(d){ // d = javascript date obj // returns epoch timestamp return (d.getTime()-d.getMilliseconds())/1000; } 
  function ToLocalDate (inDate) { var date = new Date(); date.setTime(inDate.valueOf() - 60000 * inDate.getTimezoneOffset()); return date; } 

Möchten Sie nur eine UTC-Zeichenfolge in eine “lokale” Zeichenfolge konvertieren? Du könntest es tun:

 var utc_string = '2011-09-05 20:05:15'; var local_string = (function(dtstr) { var t0 = new Date(dtstr); var t1 = Date.parse(t0.toUTCString().replace('GMT', '')); var t2 = (2 * t0) - t1; return new Date(t2).toString(); })(utc_string); 

Um die aktuelle Epoche in [ms] in eine 24-Stunden-Zeit umzurechnen. Möglicherweise müssen Sie die Option zum Deaktivieren des 12-Stunden- Formats angeben.

 $ node.exe -e "var date = new Date(Date.now()); console.log(date.toLocaleString('en-GB', { hour12:false } ));" 2/7/2018, 19:35:24 

oder als JS:

 var date = new Date(Date.now()); console.log(date.toLocaleString('en-GB', { hour12:false } )); // 2/7/2018, 19:35:24 console.log(date.toLocaleString('en-GB', { hour:'numeric', minute:'numeric', second:'numeric', hour12:false } )); // 19:35:24 

Hinweis: Die Verwendung von en-GB hier ist nur eine (zufällige) Wahl eines Ortes im 24-Stunden-Format, es ist nicht Ihre Zeitzone!

BEARBEITEN

 var utcDate = new Date(incomingUTCepoch); var date = new Date(); date.setUTCDate(utcDate.getDate()); date.setUTCHours(utcDate.getHours()); date.setUTCMonth(utcDate.getMonth()); date.setUTCMinutes(utcDate.getMinutes()); date.setUTCSeconds(utcDate.getSeconds()); date.setUTCMilliseconds(utcDate.getMilliseconds()); 

BEARBEITEN behoben

Wenn Sie Zeitstempel und Datumskonvertierungen von und nach UTC und Ortszeit ohne Bibliotheken wie moment.js auflösen möchten, casting Sie einen Blick auf die folgende Option.

Bei Anwendungen, die UTC-Zeitstempel verwenden, müssen Sie das Datum möglicherweise im Browser anzeigen, wenn die lokale Zeitzone und die Sommerzeit berücksichtigt werden. Das Bearbeiten eines Datums mit einer anderen Sommerzeit, obwohl in derselben Zeitzone, kann schwierig sein.

Die unten aufgeführten Erweiterungen für Number und Date ermöglichen das Anzeigen und Abrufen von Daten in der Zeitzone der Zeitstempel. Angenommen, Sie befinden sich in Vancouver, wenn Sie ein Datum im Juli oder Dezember bearbeiten, kann dies bedeuten, dass Sie ein Datum in PST oder PDT bearbeiten.

Ich empfehle Ihnen, das Code-Snippet unten zu überprüfen, um diese Lösung zu testen.

Konvertierungen aus Millisekunden

 Number.prototype.toLocalDate = function () { var value = new Date(this); value.setHours(value.getHours() + (value.getTimezoneOffset() / 60)); return value; }; Number.prototype.toUTCDate = function () { var value = new Date(this); value.setHours(value.getHours() - (value.getTimezoneOffset() / 60)); return value; }; 

Umrechnungen von Daten

 Date.prototype.getUTCTime = function () { return this.getTime() - (this.getTimezoneOffset() * 60000); }; 

Verwendung

 // Adds the timezone and daylight savings if applicable (1499670000000).toLocalDate(); // Eliminates the timezone and daylight savings if applicable new Date(2017, 6, 10).getUTCTime(); 

Überzeugen Sie sich selbst

 // Extending Number Number.prototype.toLocalDate = function () { var value = new Date(this); value.setHours(value.getHours() + (value.getTimezoneOffset() / 60)); return value; }; Number.prototype.toUTCDate = function () { var value = new Date(this); value.setHours(value.getHours() - (value.getTimezoneOffset() / 60)); return value; }; // Extending Date Date.prototype.getUTCTime = function () { return this.getTime() - (this.getTimezoneOffset() * 60000); }; // Getting the demo to work document.getElementById('m-to-local-button').addEventListener('click', function () { var displayElement = document.getElementById('m-to-local-display'), value = document.getElementById('m-to-local').value, milliseconds = parseInt(value); if (typeof milliseconds === 'number') displayElement.innerText = (milliseconds).toLocalDate().toISOString(); else displayElement.innerText = 'Set a value'; }, false); document.getElementById('m-to-utc-button').addEventListener('click', function () { var displayElement = document.getElementById('m-to-utc-display'), value = document.getElementById('m-to-utc').value, milliseconds = parseInt(value); if (typeof milliseconds === 'number') displayElement.innerText = (milliseconds).toUTCDate().toISOString(); else displayElement.innerText = 'Set a value'; }, false); document.getElementById('date-to-utc-button').addEventListener('click', function () { var displayElement = document.getElementById('date-to-utc-display'), yearValue = document.getElementById('date-to-utc-year').value || '1970', monthValue = document.getElementById('date-to-utc-month').value || '0', dayValue = document.getElementById('date-to-utc-day').value || '1', hourValue = document.getElementById('date-to-utc-hour').value || '0', minuteValue = document.getElementById('date-to-utc-minute').value || '0', secondValue = document.getElementById('date-to-utc-second').value || '0', year = parseInt(yearValue), month = parseInt(monthValue), day = parseInt(dayValue), hour = parseInt(hourValue), minute = parseInt(minuteValue), second = parseInt(secondValue); displayElement.innerText = new Date(year, month, day, hour, minute, second).getUTCTime(); }, false); 
  

Milliseconds to local date

Set a value

Milliseconds to UTC date

Set a value

Date to milliseconds in UTC

Set the values

@Amjad, gute Idee, aber schlecht umgesetzt. Versuchen

 Date.prototype.setUTCTime = function(UTCTimestamp) { var UTCDate = new Date(UTCTimestamp); this.setUTCFullYear(UTCDate.getFullYear(), UTCDate.getMonth(), UTCDate.getDate()); this.setUTCHours(UTCDate.getHours(), UTCDate.getMinutes(), UTCDate.getSeconds(), UTCDate.getMilliseconds()); return this.getTime(); } 

Wenn man bedenkt, dass epoch_time verfügbar ist,

 // for eg. epoch_time = 1487086694.213 var date = new Date(epoch_time * 1000); // multiply by 1000 for milliseconds var date_string = date.toLocaleString('en-GB'); // 24 hour format 

Konvertieren Sie es zuerst in String und ersetzen Sie dann den Zeitzonentext.

 function convertUnixTime(time) { return new Date(time*1000).toString().replace("GMT+0530 (Sri Lanka Standard Time)",""); }