Javascript Date and Time (new Date)

Javascript Datum und Zeit – aktuelles Datum, Dauer in Tagen berechnen

Date ist ein eingebautes Objekt in Javascript und wird durch new Date erzeugt. Die Methoden des Date-Objekts geben Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden zurück, und zwar entweder in local time oder UTC/GMT (Universal oder GMT).

Javascript hat nicht so viele eingebaute Objekte wie andere Programmier- und Scriptsprachen. Aber Zeit und Datum sind unverzichtbar für Webseiten und Apps.

Javascript Date-Objekt

Laut ECMAScript muss das Date-Objekt jedes Datum und jede Zeit innerhalb von 100 Millionen Tagen vor und nach dem 1.1.1970 umsetzen. Das sind 273 785 Jahre vor 1970 und 273 785 Jahre nach 1970. Das Javascript Date-Object reicht also noch bis in das Jahr 275755.

const heute = new Date(); // aktuelles Datum und aktuelle Zeit


Ein beliebiges Datum wird angelegt mit

let ng = new Date(2364,0,1).toLocaleString();


Wenn die Sekunden eine Rolle spielen, kann das Datum bis auf die Millisekunde angegeben werden:

                   Jahr Monat  Minuten
                     |  |      |   Sekunden
                     |  |      |   |
let nge = new Date(2018,9,31,9,26,15,18).toLocaleString();
                          |  |        |
                        Tag  Stunde  Millisekunden



toLocaleString () ohne Argument hängt ab von der Implementierung, kann aber auch die Zeitzone als Argument übermitteln: console.log(date.toLocaleString('en-US'))

Datum formatieren

heute.getMonth();     // liefert 0 - 11
heute.getFullYear();  // YYYY (startet nicht bei 0)
heute.getDate();      // liefert 1 - 31
heute.getDay();       // Tag der Woche (startet am Sonntag mit 0)
heute.getHours();     // liefert 0 - 23
heute.getMinutes();   // liefert 0 - 59
heute.getTime();      // Millisekunden seit 1.1.1970

heute.getYear() gibt es zwar auch noch, aber getYear() ist »deprecated«. D.h. der Ausdruck getYear() soll nicht mehr benutzt, sondern durch getFullYear() ersetzt werden.

Ups – aber warum hinkt der Monat beim Javascript-Datum um einen Monat hinterher? Tut er nicht. Der Monat wird von 0 gezählt. Dezember ist also 11.

Date und Timer

Datum und Zeit brauchen wir oft, um festzustellen, wieviel Zeit seit einem Zeitpunkt verstrichen ist oder wieviel Zeit noch bleibt: Timer mit setInterval.

Zeit seit dem ersten Release von Javascript

const startDateTime = new Date(1995,11,4,0,0,0,0); // Erstes Release von Javascript
const startStamp = startDateTime.getTime();

let newDate = new Date();
let newStamp = newDate.getTime();

let timer;

function updateClock() {
    newDate = new Date();
    newStamp = newDate.getTime();
    let diff = Math.round((newStamp-startStamp)/1000);
    
    let d = Math.floor(diff/(24*60*60));
    diff = diff-(d*24*60*60);
    let h = Math.floor(diff/(60*60));
    diff = diff-(h*60*60);
    let m = Math.floor(diff/(60));
    diff = diff-(m*60);
    let s = diff;
    
    document.getElementById("time-elapsed").innerHTML = d+" Tage, "+h+" Stunden, "+m+" Minuten, "+s+" Sekunden seit dem 4.11.1995";
}

timer = setInterval(updateClock, 1000);

Quelle auf Stackoverflow: javascript - time counter since start date and time

Datum / Zeit vergleichen

Date ist ausgesprochen hilfreich, wenn Datum und Zeit verglichen werden müssen. Würden wir wie folgt vorgeben:

let date1 = new Date (2000,0,1);
let date2 = new Date (2000,0,1);

if (date1 === date2 ) { … immer false!!!}

if (date1.getTime() === date2.getTime()) {
	1333609301900   === 1333609301900 // true !!!
}

wäre das Ergebnis der Abfrage (date1 === date2 ) immer false, weil Javascript hier die Objekte miteinander vergleicht. Stattdessen vergleicht man einfach die Millisekunden seit dem 1.1.1970, um festzustellen, ob ein Datum vor oder nach einem anderen Datum liegt.

Datum aus Millisekunden

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-Offset gegenüber Greenwich Mean Time (GMT) relativ zur lokalen Zeit in Minuten an.


toISOString

Die Angabe der Zeit im HTML time-Tag erfolgt als ISO-Standard ISO-8601 (YYYY-MM-DDTHH:mm:ss.sssZ) – den liefert Javascript frei Haus.

let today = new Date();
today.toISOString().substring(0, 10);
document.querySelector('#ni').innerHTML = today;

Alle moderenen Browser, IE ab Version 9.

Datum zu Woche – date to week

Eine Methode getWeek – ähnlich wie PHP date('W') – gibt es in Javascript nicht. In einer ISO-8601 Wochennummer beginnt die Woche am Montag, die erste Woche eines Jahres beginnt am ersten Donnerstag des Jahres.

Es kann also eine Überschneidung zwischen der letzten Woche eines Jahres und der ersten Woche des folgenden Jahres um bis zu drei Tagen geben.

1.1.2016, 2.1.2016 und 3.1.2016 fielen z.B. noch in Woche 53, erst der 4.1.2016 in Woche 1 des Jahres 2016. 2018 war in Hinsicht auf die Wochenzahl ein ideales Jahr: Der 1.1.2018 war ein Montag.

Date.prototype.getWeekNumber = function(){
    let d = new Date(+this);
    d.setHours(0,0,0);
    d.setDate(d.getDate()+4-(d.getDay()||7));
    return Math.ceil((((d-new Date(d.getFullYear(),0,1))/8.64e7)+1)/7);
};

Quelle: Get week of year in JavaScript like in PHP

Eingabe-String des Datums in ISO-Datum umwandeln mit einem regulären Ausdruck (RegExp-Object) für Trennzeichen wie ., - und /:

let mydate = document.querySelector('#md');
mydate.onblur = function () {
	let d = this.value;
	let seps = [' ', '\\\.', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
	let fields = d.split(new RegExp(seps.join('|'), 'g'));
	let mydate = new Date(fields[2],fields[1]-1,fields[0]);
	document.querySelector('.mdres').innerHTML = "Woche " + mydate.getWeekNumber();
}
JS Date and Time mit new Date 1970