Zeitzone und getTimezoneOffset

Javascript Datum und Zeit

Javascript kennt nur die lokale Zeitzone und UTC. Für Irritationen sorgt der Wechsel von Sommer- auf Normal- bzw. Winterzeit. Zur Krönung gibt es negative Werte für UTC+X und positive für UTC-X.

18-12-15 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

Date.parse

Date.parse (dateString) gibt die Zahl der Millisekunden seit dem 1.1.1970 00:00 UTC zurück oder NaN, wenn das Argument nicht erkannt wird.

Während der Date()-Konstruktor einen ISO 8601-String parst und ein Date-Objekt zurückgibt, gibt Date.parse (dateString) Millisekunden als Zahl zurück.

const dateNew = new Date ('2022-07-13');  // 
const datePar = Date.parse('2022-07-13'); // 

Das Argument dateString ist ein Datum des erweiterten ISO-Kalenders als Zeichenfolge. Allerdings können verschiedene Browser als Ergänzung zu ISO 8601 andere Formate unterstützen.

YYYY
das Jahr, geschrieben mit 4 oder 6 Ziffern (erforderlich), 6 Ziffern (z.B. für -50000)
MM
Monat mit führender 0
DD
Tag mit führender 0
T
Der Buchstabe T markiert den Anfang eines Zeitstempels
HH
Stunde im 24-Stunden-Format mit führender 0
mm
Minute mit führender 0
ss.sss
Sekunden und Millisekunden
Z
Der Buchstabe Z markiert das Ende des Zeitstempels
const unixTag0 = Date.parse('1970');
console.log(unixTag0); // 

const timeNow = new Date();	// 
const now = Date.parse(timeNow); // 
const timestamp = new Date().getTime(); // 

Datum aus Millisekunden

Um aus Millisekunden bzw. einem Timestamp wieder ein Datum zu machen:

console.log("new Date(timestamp)", new Date(timestamp));

Wenn in new Date ein numerisches Argument übergeben wird, interpretiert Javascript die Zahl als Millisekunden. new Date (60000) wäre also eine Minute nach Mitternacht am 1.1.1970.

document.getElementById('sec').innerHTML = 
   new Date(60000).toLocaleString() + ' ' + 
   new Date(60000).getTimezoneOffset(); // 

toLocaleString() konvertiert das Datum entsprechend den örtlichen Konventionen zur Darstellung von Datum und Zeit.

getTimezoneOffset() gibt den Zeitzonen-Abweichung gegenüber Greenwich Mean Time (GMT) relativ zur lokalen Zeit in Minuten an.

document.getElementById("GMT").innerHTML = Date.parse(new Date());
document.getElementById('par').innerHTML = new Date().getTimezoneOffset(); 
Greenwich Mean Time 
Zeitzonen-Offset 

Zeit von bis

Wie viele Sekunden, Stunden oder Tage liegen zwischen einem Start- und Endpunkt? Da die Zeit in Javascript auf Millisekunden beruht, läßt sich die Zeit zwischen zwei Ereignissen durch einfaches Subtrahieren berechnen, z.B. die Zeit für die Aufarbeitung einer Datenanalyse bei großen Datenmengen.

Date.now() gibt die Zeit in Millisekunden seit dem 1.1.1070 zurück. Differenz durch 1000 geteilt liefert die Zeitangabe in Sekunden.

// Beginn der Berechnungen
let ct = Date.now();

function analyse (day) {
	const ms = Date.now();
	const past = ms - ct;
	ct = ms;
	console.log (`time ${ms} *** ${(past/1000).toFixed(2)} *** ${day}`);
	…
}
time 1658576680223 *** 16.61 *** 2022-06-01
time 1658576720058 *** 39.84 *** 2022-06-02
time 1658576763889 *** 43.83 *** 2022-06-03
time 1658576795721 *** 31.83 *** 2022-06-04
…

Über einen Zeitraum iterieren

Für Irritationen sorgt der Wechsel von Sommerzeit (Day Light Saving) auf Normalzeit. Zunächst aber mal: Wenn wir von einem Zeitraum VON BIS reden, meinen wir das inklusive des Von-Zeitpunkts und des BIS-Zeitpunkts. Hier erwarten wir 4 Tage: 30.10, 31.20, 1.11, 2.11.

let start = new Date ("2022-10-30");
let end = new Date ("2022-11-02");

for (let d = start; d <= end; d.setDate(d.getDate() + 1)) {
	console.log ("d", d)
} 

    Wo wir 4 Tage zwischen dem 30. Oktober und dem 2. November 22 erwarten, liefert die Iteration nur drei Tage und läßt den 2. November unter den Tisch fallen.

    Beim Wechsel von Normalzeit auf Sommerzeit hingegen klappt die Berechnung ebenso problemlos wie bei 4 Tagen innerhalb der Sommerzeit oder der Winterzeit. Um die Iteration allgemeingültig zu halten, wird die Zeitdifferenz zur UTC eingerechnet.

    const start = new Date ("2023-03-25");
    const end = new Date ("2023-03-28");
    
    const o = end.getTimezoneOffset();
    end.setHours(end.getHours() - o/60);
    
    for (let d = start; d <= end; d.setDate(d.getDate() + 1)) {
    	console.log ("d", d);
    }
    

      Sommerzeit oder Day Light Saving stellt die Uhr vor – hier in Deutschland um eine Stunde.

      Zeitzone und getTimezoneOffset ()

      getTimezoneOffset () stellt fest, ob ein Datum in der Sommer- oder Normalzeit liegt. Für Deutschland gilt: Während der Winter- oder Normalzeit liegt Deutschland 60 Minuten hinter der koordinierten Weltzeit UTC (Coordinated Universal Time). In der Sommerzeit – Day Light Saving (Uhr um eine Stunde vorgestellt) – beträgt die Differenz zu UTC 120 Minuten.

      getTimezoneOffset gibt negative Werte für UTC+X und positive für UTC-X. Mein lieber Schwan – geht's noch?

      console.log (new Date("2023-03-25").getTimezoneOffset());  // -60 Winterzeit in Deutschland
      console.log (new Date ("2023-03-28").getTimezoneOffset()); // -120 Sommerzeit in Deutschland
      

      Und wie spät ist es jetzt auf den Bahamas oder in New York? Javascript kennt nur die lokale Zeitzone und UTC. Um die lokale Zeit in Tokio (Japan ist der Mitteleuropäischen Normalzeit MEZ um 8 Stunden voraus) oder London (in der Winterzeit – UTC+2 ist Deutschland zwei Stunden voraus) zu ermitteln, brauchen wir den TimezoneOffset und den Unterschied zwischen den Zeitzonen – das wäre eine Methode.

      const lokalzeit = new Date();                   // 
      const offset = lokalzeit.getTimezoneOffset();   // 
      
      const tokio = new Date (Date.parse(lokalzeit) + 8*60*60*1000);
      
      Deutschland
      London
      USA New York
      Japan Tokio

      DateTimeFormat() – Zeitzone

      Die Funktion DateTimeFormat() gibt die Zeitzone als String zurück, während getTimezoneOffset() die Minuten liefert.

      var zeitzone = Intl.DateTimeFormat().resolvedOptions().timeZone;
      console.log(zeitzone); //