it-swarm.com.de

Holen Sie sich die Zeit einer bestimmten Zeitzone

Ich verwende eine JavaScript-Klasse Date und versuche, das aktuelle Datum mithilfe der getDate()-Methode abzurufen. Es ist jedoch offensichtlich, dass Datum und Uhrzeit des Systems geladen werden. Ich führe den Code aus Indien aus, aber ich möchte das Datum und die Uhrzeit von UK mit derselben Methode abrufen. Wie kann ich das machen ?

50
aslamdoctor

Wenn Sie den UTC-Offset kennen, können Sie ihn übergeben und die Zeit mithilfe der folgenden Funktion abrufen:

function calcTime(city, offset) {
    // create Date object for current location
    var d = new Date();

    // convert to msec
    // subtract local time zone offset
    // get UTC time in msec
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    // create new Date object for different city
    // using supplied offset
    var nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time for city"+ city +" is "+ nd.toLocaleString();
}

alert(calcTime('Bombay', '+5.5'));

Entnommen von: Lokale Zeit in eine andere umwandeln

50

Sie könnten Intl.DateTimeFormat verwenden.

var options = {
    timeZone: 'Europe/London',
    year: 'numeric', month: 'numeric', day: 'numeric',
    hour: 'numeric', minute: 'numeric', second: 'numeric',
},
    formatter = new Intl.DateTimeFormat([], options)
formatter.format(new Date())

Alternativ, wenn Sie nur einmal formatieren möchten, verwenden Sie Date.prototype.toLocaleDateString() .

(new Date()).toLocaleString([], options)

Leider sind Browser not erforderlich, um andere Zeitzonen als UTC zu verstehen, also try diese Blöcke und finden eine Alternative für den Fall, dass sie ausfallen sollten, z.

29
transistor09

Am besten verwenden Sie getLocaleString wie folgt:

Erstellen Sie ein Datumsobjekt:

date = new Date(0)

Wenn Sie in Berlin sind, sollte dies in diese Zeichenfolge konvertiert werden:

Do Jan 01 1970 01:00:00 GMT + 0100 (MEZ)

Holen Sie sich die Stunden in Athen:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Europe/Athens' })

'02'

Holen Sie sich die Stunden in Shanghai:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Asia/Shanghai' })

'08'

16
Chris

Dies ist der richtige Weg, um ## zu bekommen

function getTime(offset)
        {
            var d = new Date();
            localTime = d.getTime();
            localOffset = d.getTimezoneOffset() * 60000;

            // obtain UTC time in msec
            utc = localTime + localOffset;
            // create new Date object for different city
            // using supplied offset
            var nd = new Date(utc + (3600000*offset));
            //nd = 3600000 + nd;
            utc = new Date(utc);
            // return time as a string
            $("#local").html(nd.toLocaleString());
            $("#utc").html(utc.toLocaleString());
        }
9
Joy Chowdhury

Sie können getUTCDate() und die zugehörigen getUTC...()-Methoden verwenden, um auf eine Zeit außerhalb der UTC-Zeit zuzugreifen und anschließend zu konvertieren.

Wenn Sie möchten, können Sie in UTC seit der Unix-Epoche valueOf() verwenden, das die Anzahl von Sekunden zurückgibt, und damit arbeiten, aber es wird wahrscheinlich viel mehr damit zu tun haben.

5
mc10

Date.getTimezoneOffset ()

Die Methode getTimezoneOffset () gibt die Zeitdifferenz zwischen GMT (Greenwich Mean Time) und Ortszeit in Minuten zurück.

Wenn Ihre Zeitzone beispielsweise GMT + 2 ist, wird -120 zurückgegeben.

Anmerkung: Diese Methode wird immer in Verbindung mit einem Date-Objekt verwendet.

var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
//output:The local time zone is: GMT 11
1
Kieran

Wenn es wirklich wichtig ist, dass Sie das richtige Datum und die richtige Uhrzeit haben; Es ist am besten, einen Dienst auf Ihrem Server zu haben (den Sie natürlich in UTC ausführen), der die Uhrzeit zurückgibt. Sie können dann auf dem Client ein neues Datum erstellen, die Werte vergleichen und gegebenenfalls alle Datumsangaben mit dem Versatz zur Serverzeit anpassen.

Warum das machen? Ich hatte Fehlerberichte, die schwer zu reproduzieren waren, da ich die Fehlernachrichten im Serverprotokoll nicht finden konnte, bis ich bemerkte, dass der Fehlerbericht an zwei Tagen verschickt wurde. After Ich hatte ihn erhalten. Sie können wahrscheinlich darauf vertrauen, dass der Browser die Zeitzonenkonvertierung korrekt ausführt, wenn ein UTC-Zeitstempel gesendet wird. Natürlich können Sie den Benutzern nicht vertrauen, dass die Systemuhr korrekt eingestellt ist. (Wenn für die Benutzer auch die Zeitzone falsch eingestellt ist, gibt es keine Lösung. Statt die aktuelle Serverzeit in "lokaler" Zeit zu drucken.)

0