new Date() ohne Uhrzeit

B

Benutzer007

Hallo,

wie bekomme ich denn ein Datum ohne Uhrzeit?
Javascript:
var d1 = new Date();
var d2 = new Date("April 14,2015");
alert(d1 + " " +  d2 + " -> " + (d1 ==  d2))
alert(d1.getTime() + " " +  d2.getTime() + " -> " + (d1.getTime() ==  d2.getTime()))
LG
 
Hi,

entweder du nutzt die Methoden getDate() (Monatstag), getMonth() (Monat) und getFullYear() (volles Jahr), um das Datum zeitfrei zu ermitteln oder du setzt beim Erstellen des Datums die Zeit auf einen festen Wert (z.B. 0 Uhr).
Javascript:
var date = new Date();
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);

Ciao
Quaese
 
Das mit der Zeit auf 0 Uhr ist das Richtige. Die getxxx-Geschichte kannte ich, aber ich dachte mir, es muss doch eine einfachere Möglichkeit geben. Thx.

Ups, wie geht das?
oder du setzt beim Erstellen des Datums die Zeit auf einen festen Wert (z.B. 0 Uhr)
Offensichtlich gibt es keine kürzere Möglichkeit also so?

Javascript:
var d1 = new Date();
    d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate(), 0, 0, 0);
var d2 = new Date("April 14,2015");
alert(d1 + " " +  d2 + " -> " + (d1 ==  d2))
alert(d1.getTime() + " " +  d2.getTime() + " -> " + (d1.getTime() ==  d2.getTime()))

Merkwürdig ist, dass der erste Check false ergibt
Tue Apr 14 2015 00:00:00 GMT+0200 (CEST)
Tue Apr 14 2015 00:00:00 GMT+0200 (CEST) -> false
und der zweite true:
1428962400000
1428962400000 -> true
 
Zuletzt bearbeitet von einem Moderator:
Merkwürdig ist, dass der erste Check false ergibt
Der Grund ist, dass die Variablen Objekte sind und man diese direkt nicht sinnvoll vergleichen kann. Javascript arbeitet hier mit den Referenzen und nicht mit den Inhalten und die Referenzen sind immer ungleich, da es zwei verschiedene Variablen sind.
 
Zuletzt bearbeitet:
Siehe auch hier: http://stackoverflow.com/a/14629978/603003

Der richtige Weg ist es, die Werte von getTime() oder valueOf() jeweils zu prüfen:
Javascript:
if (date1.getTime() == date2.getTime()) {
  // ...
}

Willst du die Datumsangaben nur auf den Tag genau vergleichen, also die Stunden, Sekunden und Millisekundenangaben vernachlässigen, dann musst zu diese auf 0 setzen:
Javascript:
function stripTimeFromDate(date) {
  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
}

function sameDate(date1, date2) {
  return stripTimeFromDate(date1).getTime() == stripTimeFromDate(date2).getTime();
}

Du könntest auch komponentenweise vergleichen. Dies ist auf jeden Fall einfacher.
Interessant fände ich, ob Zeitsprünge (z. B. in Shanghai) in der Geschichte hier Probleme ergeben könnten. Wenn man ein neues Date-Objekt erstellt und keine Stunden angibt, dann werden sie automatisch auf 0 gesetzt. Was passiert nun, wenn genau zu dieser Stunde ein Zeitsprung war?
 
Javascript:
function sameDate(date1, date2) {
  return date1.getDate() == date2.getDate() &&
         date1.getMonth() == date2.getMonth() &&
         date1.getFullYear() == date2.getFullYear();
}
 

Neue Beiträge

Zurück