514 Stimmen

Datum in eine andere Zeitzone in JavaScript konvertieren

Ich bin auf der Suche nach einer Funktion, mit der ich das Datum einer Zeitzone in eine andere umwandeln kann.

Es werden zwei Parameter benötigt,

  • Datum (im Format "2012/04/10 10:10:30 +0000")
  • Zeitzone string ("Asien/Jakarta")

Die Zeitzonenzeichenfolge wird beschrieben in http://en.wikipedia.org/wiki/Zone.tab

Gibt es eine einfache Möglichkeit, dies zu tun?

3voto

Sahil Kapoor Punkte 49

Hier ist mein Code, es ist perfekt funktioniert, können Sie versuchen, mit geben unten Demo:

$(document).ready(function() {
   //EST
setInterval( function() {
var estTime = new Date();
 var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
var seconds = currentDateTimeCentralTimeZone.getSeconds();
var minutes = currentDateTimeCentralTimeZone.getMinutes();
var hours =  currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
 var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";

if (hours < 10){
     hours = "0" + hours;
}

if (minutes < 10){
     minutes = "0" + minutes;
}
if (seconds < 10){
     seconds = "0" + seconds;
}
    var mid='PM';
    if(hours==0){ //At 00 hours we need to show 12 am
    hours=12;
    }
    else if(hours>12)
    {
    hours=hours%12;
    mid='AM';
    }
    var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
// Add a leading zero to seconds value
$("#sec").html(x3);
},1000);

});

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p class="date_time"><strong id="sec"></strong></p>
</body>
</html>

3voto

seeking27 Punkte 115

Ich sollte anmerken, dass ich in Bezug auf die externen Bibliotheken, die ich verwenden kann, eingeschränkt bin. moment.js und timezone-js waren für mich keine Option.

Das js-Datumsobjekt, das ich habe, ist in UTC. Ich brauchte, um das Datum UND die Uhrzeit von diesem Datum in einer bestimmten Zeitzone (in meinem Fall "Amerika/Chicago") zu erhalten.

 var currentUtcTime = new Date(); // This is in UTC

 // Converts the UTC time to a locale specific format, including adjusting for timezone.
 var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));

 console.log('currentUtcTime: ' + currentUtcTime.toLocaleDateString());
 console.log('currentUtcTime Hour: ' + currentUtcTime.getHours());
 console.log('currentUtcTime Minute: ' + currentUtcTime.getMinutes());
 console.log('currentDateTimeCentralTimeZone: ' +        currentDateTimeCentralTimeZone.toLocaleDateString());
 console.log('currentDateTimeCentralTimeZone Hour: ' + currentDateTimeCentralTimeZone.getHours());
 console.log('currentDateTimeCentralTimeZone Minute: ' + currentDateTimeCentralTimeZone.getMinutes());

UTC ist derzeit 6 Stunden vor "Amerika/Chicago". Die Ausgabe ist:

currentUtcTime: 11/25/2016
currentUtcTime Hour: 16
currentUtcTime Minute: 15

currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15

3voto

Santiago Corredoira Punkte 44500

Wenn Sie nur die Zeitzonen umrechnen müssen, habe ich ein zurechtgestutzte Version de Moment-Zeitzone mit nur einem Minimum an Funktionalität. Seine ~1KB + Daten:

S.loadData({
    "zones": [
        "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
        "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
    ],
    "links": [
        "Europe/Paris|Europe/Madrid",
    ]
});

let d = new Date();
console.log(S.tz(d, "Europe/Madrid").toLocaleString());
console.log(S.tz(d, "Australia/Sydney").toLocaleString());

2voto

Sie können auch Folgendes verwenden https://www.npmjs.com/package/ctoc_timezone

Die Implementierung und Formatanpassung ist sehr einfach.

Ändern des Formats in toTimeZone:

CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");

Ausgang :

28th Feb 2013 19:00:00 EST

Sie können mehrere Funktionen im Dokument erkunden.

2voto

Muhammad Punkte 2424

Machen Sie es sich einfach:

const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(timeZone);

var d = new Date();
console.log(d.toLocaleString('en-US', { timeZone }));

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