Die Methode Date.prototype.valueOf() gibt den primitiven Zahlenwert eines Date-Objekts zurück – die Anzahl der Millisekunden seit dem 1. Januar 1970 UTC. Funktional ist sie identisch zu getTime(). Ihre eigentliche Bedeutung liegt jedoch im impliziten Verhalten: Sie wird automatisch von der Sprachlaufzeit aufgerufen, sobald ein Date-Objekt in einem numerischen Kontext erscheint – etwa bei <, >, - oder + mit Zahlen. Genau das macht direkte Date-Vergleiche überhaupt erst möglich.
Funktionsweise
valueOf() wird von der Sprachlaufzeit verwendet, um ein Objekt in eine primitive Zahl zu konvertieren. Ohne diese Methode wäre dateB - dateA nicht möglich, da der --Operator auf primitiven Zahlen arbeitet.
Im Detail:
- Numerischer Kontext (
+,-,<,>,<=,>=): JavaScript ruftvalueOf()auf, bekommt den Timestamp und rechnet damit weiter. - Loose Equality (
==): JavaScript versucht primitivkonvertierung, ruft alsovalueOf()(odertoString()). - Strict Equality (
===): Hier wird keinvalueOf()aufgerufen – Date-Objekte werden über Referenzgleichheit verglichen, was bei verschiedenen Instanzen mit demselben Timestampfalseliefert.
Bei einem ungültigen Date-Objekt wird NaN zurückgegeben.
Syntax
date.valueOf()Die Methode erwartet keine Parameter.
Rückgabewert
Eine Zahl: die Millisekunden zwischen dem 1. Januar 1970 UTC und dem repräsentierten Zeitpunkt. Bei einem ungültigen Date-Objekt wird NaN zurückgegeben.
Beispiele
Direkter Aufruf
const date = new Date("2026-05-01T00:00:00Z");
console.log(date.valueOf());1777593600000Implizite Nutzung beim Vergleich
const a = new Date("2026-05-01");
const b = new Date("2026-05-15");
console.log(a < b);
console.log(b - a);true
1209600000Identisch zu getTime()
const date = new Date("2026-05-01");
console.log(date.valueOf() === date.getTime());trueFalle: === statt ==
const a = new Date("2026-05-01");
const b = new Date("2026-05-01");
console.log(a === b); // Referenzvergleich
console.log(a == b); // Auch false: Object zu Object
console.log(a.valueOf() === b.valueOf()); // Korrektfalse
false
trueUngültiges Datum
const invalid = new Date("kein Datum");
console.log(invalid.valueOf());NaNHinweise & verwandte Methoden
valueOf()undgetTime()sind funktional identisch –getTime()ist aussagekräftiger und sollte bei expliziten Aufrufen bevorzugt werden.- Für Vergleiche zweier Date-Objekte: nicht
===, sonderndateA.getTime() === dateB.getTime()oder kürzer+dateA === +dateB. - Die Symbol-Methode
[Symbol.toPrimitive]()hat höhere Priorität alsvalueOf()und entscheidet bei mehrdeutigen Konvertierungen, welche String-/Number-Ausgabe gewählt wird. - Bei
JSON.stringify()wird nichtvalueOf()aufgerufen, sonderntoJSON()– die Date wird als ISO-String serialisiert, nicht als Timestamp.