Wenn Sie von einem Datumswert einen anderen Datumswert subtrahieren wollen oder wenn Sie zu einem Datumswert einen festen Wert addieren / subtrahieren wollen handelt es sich dabei um eine arithmetische Berechnung mit Datumswerten.
<script type="text/javascript" language="JavaScript">
<!--
var DatumHeute = new Date();
var DatumVergleich = new Date(2020,11,24);
var Differenz01 = DatumVergleich.getTime() - DatumHeute.getTime()
//-->
</script>
Das Ergebnis der Berechnung wird in die Variable 'Differenz01' geschrieben.
Wenn Sie das Prinzip und die Regeln verstanden haben, ist das eigentlich nichts anderes jede andere Kalkulation. Später kommt noch der Vergleich mit einer Konstanten oder einem anderen Datumswert hinzu. Das hört sich nach viel Mathematik an, ist aber halb so wild.
In JavaScript wird allerdings nicht mit Tagen sondern gundsätzlich mit Millisekundenwerten gerechnet! Wie man das für eine brauchbare Berechnung umsetzt, lesen Sie hier.
Demo 01
Die programminterne Berechnung von Datumswerten bezieht sich in JavaScript immer auf das Startdatum 01.01.1970! Daher nehme ich auch genau dieses Datum zur Veranschaulichung.
Zeitspanne zwischen dem 01.07.2010 und dem 22.07.2010 berechnen:
Kennt man die Zeitspanne zwischen den beiden Daten 01.01.1970 | 01.07.2010 und die Zeitspanne zwischen den beiden Daten 01.01.1970 | 22.07.2010, kann man mit der Differenz auch die 'Zwischenzeit' ermitteln.
// Wert in Millisekunden
var Differenz = ZeitVerstrichen1 – ZeitVerstrichen2
Die Berechnungen beziehen sich also auf das 'Urdatum' 01.01.1970. Damit schließe ich alle Fehlberechnungen Probleme oder zusätzlichen Prüfungen aus, die sich durch Konstruktionen eigener Berechnungsformeln ergeben könnten. Schließlich wird von JavaScript das Vorkommen von Schaltjahren berücksichtigt.
Demo 02
Ich möchte zur Berechnung einer Zeitspanne oder für einen Vergleich einen Datumswert von einem andern Datumswert subtrahieren oder hinzu zählen.
Die Variablen DatumZukunft, DatumHeute, DatumVergangenheit, ... usw. werden vor den Berechnungen mit den entsprechenden Werten 'befüllt'. Hier möchte ich lediglich die Berechnungszeile darstellen.
Zeitspanne zwischen 'jetzt' und dem 31.12.2030 berechnen:
var ZeitBis = DatumZukunft – DatumHeute // Ergebnis ist ein Wert in Millisekunden
Zeitspanne zwischen 'jetzt' und dem 01.12.1999 berechnen:
var ZeitSeit = DatumHeute – DatumVergangenheit // Ergebnis ist ein Wert in Millisekunden
Wie viele Tage sind es bis zum 31.12.2030 wenn ein Tag 86400000 Millisekunden hat?
var AnzahlTage = (DatumZukunft – DatumHeute) / 86400000;
Demo 03
Die Variablen DatumWeihnachten, DatumHeute, Datum01, ... usw. werden vor den Berechnungen mit den entsprechenden Werten 'befüllt'. Hier möchte ich lediglich die Berechnungszeile darstellen.
var Differenz = Datum01 – Datum02;
var DatumIn30Tagen = DatumHeute + (30 * 86400000);
var TageBisWeihnachten = (DatumWeihnachten - DatumHeute) / 86400000;
var WochenBisWeihnachten = (DatumWeihnachten - DatumHeute) / (86400000 * 7);
var WochenBisWeihnachten = (DatumWeihnachten - DatumHeute) / 604800000;
var MinutenBisWeihnachten = (DatumWeihnachten - DatumHeute) / 60000;
var SekundenBisWeihnachten = (DatumWeihnachten - DatumHeute) / 1000;
Bei der Berechnung von Monaten wird es dann ein wenig komplexer. Das lesen Sie auf einer separaten Seite.
Demo 04
Mit JavaScript lassen sich beinahe alle erdenklichen datums- und zeitbezogenen Berechnungen anstellen. Vollmond, Feiertage, Bevölkerungswachstum, ... . Sie müssen nur die richtige Formel oder Konstante kennen und natürlich die entsprechenden JavaScript-Funktionenen und Regeln.
Konstante für 1 Mondperiode = 29.53059027 Tage
Mit Datumswerten rechnen - Ergebnisse runden, umwandeln, vergleichen
1 zwei Date-Objekte herstellen
Für meine Berechnungen schaffe ich zwei neue Datums-Objekte. Eines soll das aktulle Datum enthalten (Kopie der Systemzeit). Das zweite soll den Datumswert für den 24.12.2020 enthalten. Dazu legt man gleich beim "Kreieren" des neuen Date-Objekts die Werte für Jahr, Monat und Tag fest.
Stunden, Minuten, Sekunden und Millisekunden könnte man ebenfalls eintragen. Fehlen diese Angaben wird der Wert jeweils mit '0' festgelegt. Berücksichtigen Sie beim Eintrag des Monatswertes, das JavaScript beim Hochzählen der Monate mit Null beginnt (Januar = 0, Dezember = 11).
var Variablenname = new Date(Jahr,Monat,Tag);
var DatumHeute = new Date();
var DatumVergleich = new Date(2020,11,24);
Mit den beiden Codezeilen oben habe ich zwei neue Date-Objekte geschaffen.
Die Variable 'DatumHeute' enthält nun Datums- und Zeitinformation für heute und jetzt (Zeitpunkt = Öffnen der HTML-Seite).
Datumsinfo von DatumHeute beim Öffnen dieser Seite:
Verstrichene Zeit seit 01.01.1970 beim Öffnen dieser Seite:
(Millisekunden)
JavaScript definiert das aktuelle Datum als Wert in Millisekunden, die seit dem 1. Januar 1970 um Null Uhr verstrichen sind!
b) Wert von DatumVergleich
Die Variable 'DatumVergleich' enthält nun Datums- und Zeitinformation für den 24. Dezember 2020, Null Uhr.
Datumsinfo von DatumVergleich:
Zeit in ms zwischen 01.01.1970 und 24. Dezember 2020:
(Millisekunden)
JavaScript definiert 'DatumVergleich' als Wert in Millisekunden, die zwischen dem 1. Januar 1970 um Null Uhr und 24. Dezember 2020 Null Uhr liegen!
2 zwei Date-Objekte subtrahieren
Nun bin ich im Besitz von zwei Objekten die Datumsinformationen enthalten (die beiden Date-Objekte sind ja von mir geschaffen). Wenn ich den einen Wert von dem anderen subtrahiere, erhalte ich die Differenz. Damit meine Berechnungen in JavaScript auch stimmen bin ich mir im Klaren darüber, dass die Ergebnisse Millisekundenwerte darstellen.
var Differenz01 = DatumVergleich - DatumHeute[in Millisekunden]
Die 'Umwandlung' in Millisekunden (besser die 'Entnahme' des Millisekundenwertes) aus einem Date-Objekt ist mit der JavaScript-Methode 'getTime()' möglich.
Die Subtraktion von zwei Datumswerten sieht dann so aus:
var DatumHeute = new Date();
var DatumVergleich = new Date(2020,11,24);
var Differenz01 = DatumVergleich.getTime() - DatumHeute.getTime()
Das Ergebnis der Berechnung wird in die Variable 'Differenz01' geschrieben.
Querverweis:
Ein Beispiel das aufzeigt, wie man zu einem Datumswert eine Zeitspanne hinzurechnet finden Sie auf einer separaten Beispielseite. Dort erkläre ich, wie Sie zu einem Datumswert z.B. 20 Tage hinzurechnen.
DatumZukunft = DatumHeute + 20 Tage | DatumVergangenheit = DatumHeute - 20 Tage
[siehe auch: Methode parse(), zur Umwandlung eines Textstrings in einen Millisekundenwert]
3 Umrechnen
Nun hätte ich allerdings gerne die Differenz als einen Wert in Tagen! Folglich muss ich den Millisekundenwert noch durch die Anzahl der Millisekunden je Tag dividieren.
1 Tag = 24 Std * 60 Min * 60 Sek * 1000 ms
entspricht 86400000 Millisekunden / Tag
Ich muss also durch 86400000 ms / Tag teilen!
var Differenz01 = (DatumVergleich.getTime() - DatumHeute.getTime()) / 86400000
Das mag ja beeindruckend sein, ganz schön viele Nachkommastellen. Ist aber nicht was ich mir vorstelle. Schließlich möchte ich mit dem Ergebnis in Tagen als ganze Zahl später weitere Berechnungen oder Vergleiche anstellen.
4 Runden
a) aufrunden nächst höhere Interger (Ganzzahl)
var Differenz02 = Math.ceil(Differenz01)
b) abrunden nächst niedere Interger (Ganzzahl)
var Differenz02 = Math.floor(Differenz01)
c) runden nächste Interger (Ganzzahl)
var Differenz02 = Math.round(Differenz01)
5 Vergleichen + Rechnen
Jetzt können Sie weitere Berechnungen oder Vergleiche anstellen. Sie könnten das Ergebnis z.B. durch 7 oder 365 teilen um die Anzahl der Wochen oder Jahre zu berechnen. Oder Sie berechnen wie viele Mondzyklen während dieser Zeit durchlaufen werden:
Wie oft sehe ich den Vollmond während dieser Zeit?
wenn Anzahl der Tage genau 1 ist
if ( Differenz02 == 1 )
{
... tu was (nur noch 1 Tag)
}
wenn Anzahl der Tage größer als 365
if ( Differenz02 > 365 )
{
... tu was (mehr als 1 Jahr)
}
wenn Anzahl der Tage größer als 1 und Anzahl der Tage kleiner / gleich 10
if ( Differenz02 > 1 && Differenz02 <= 10 )
{
... tu was
}
wenn Anzahl der Tage kleiner / gleich Null ist
if ( Differenz02 <= 0 )
{
... tu was (Termin verstrichen)
}
Zusammenfassung
Eine einfach JavaScript-Funktion zur Verarbeitung von 2 Datumswerten erstellen. Das hört sich oft komplizierter an als es in Wirklichkeit ist: Zwei Datumswerte subtrahieren / addieren und möglicherweise noch ein wenig multiplizieren / dividieren.
<script type="text/javascript" language="JavaScript">
<!--
var DatumHeute = new Date()
var DatumVergleich = new Date(2020,11,24) // 24.12.2020 (Monatswerte 0-11)
var Differenz01 = DatumVergleich.getTime() - DatumHeute.getTime()
var Differenz02 = Differenz01 / 86400000
var Differenz03 = Math.ceil( Differenz01 / 86400000 )
document.write('Anzahl der Tage während der Zeitspanne: ' + Differenz03);
//-->
</script>
Differenz01 entspricht Abstand in Millisekunden
Differenz02 entspricht Abstand in Tagen
Differenz03 entspricht Abstand in Tagen gerundet
Ein so berechneter Differenzwert kann dann für einen Vergleich (mit if/else oder case) eingesetzt werden. Man könnte auch direkt abfragen "ist DatumVergleich größer als DatumHeute".
Der Rechenweg über den Differenzwert lässt eine spätere Erweiterung zu, wenn man z.B. zusätzlich unterscheiden will "ist der Termin um 10 Tage überschritten?", "steht der Termin in den nächsten 20 Tagen an?", ...
Nur für Tüftler, Skeptiker (wie mich) und Entdecker
Ich habe behauptet:
"Ein Date-Objekt beinhaltet die Anzahl der Millisekunden seit dem 01.01.1970, 0:00 Uhr."
"Die Methode 'getTime()' liefert die Anzahl Millisekunden als Zahl zurück, die seit dem 1. Januar 1970, 0:00:00 Uhr vergangen sind."
Demnach kann ich mit den beiden Date-Objekten DatumVergleich und DatumHeute gleich rechnen. Das wurde oben ja bereits bewiesen. Was geschieht wenn ich zuerst die Millisekundenwerte mit der Methode 'getTime()' entnehme und damit weiter arbeite?
Macht das einen Unterschied? Ist es möglicherweise so, das bei den Berechnungen unterschiedliche Variablentypen generiert werden? Machen wir den Test:
Rechnen 1
Die 'Umwandlung' in Millisekunden (besser die 'Entnahme' des Millisekundenwertes) aus einem Date-Objekt ist mit der JavaScript-Methode 'getTime()' möglich.
[siehe auch: Methode parse(), zur Umwandlung eines Textstrings in einen Millisekundenwert]
Die Subtraktion von zwei Datumswerten sieht dann so aus:
var DatumHeute = new Date();
var DatumVergleich = new Date(2020,11,24);
var Differenz01 = DatumVergleich.getTime() - DatumHeute.getTime()
Das Ergebnis der Berechnung wird in die Variable 'Differenz01' geschrieben.
Rechnen 2
Die Subtraktion von zwei Datumswerten sieht dann so aus:
var DatumHeute = new Date();
var DatumVergleich = new Date(2020,11,24);
var Differenz02 = DatumVergleich - DatumHeute
Das Ergebnis der Berechnung wird in die Variable 'Differenz01' geschrieben.