So überprüfen Sie, ob zwei Daten nicht am selben Tag sind. Ich habe diese Lösung gefunden, aber vielleicht gibt es einen besseren Weg, dies zu tun:

 var actualDate = new Date();
 var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000;
34
Andreas Köberle 9 Okt. 2012 im 18:50

7 Antworten

Beste Antwort

Eine andere Option ist die Verwendung der Funktion .toDateString(), um beide Daten in Zeichenfolgen zu analysieren. Die Funktion formatiert die Ausgabe an: "Mi 28 Jul 1993". Dann können Sie beide Datumszeichenfolgen vergleichen.

actualDate.toDateString() === dateToCheck.toDateString()
// returns true if actualDate is same day as dateToCheck

Hier ist ein Plunker:

http://plnkr.co/edit/J5Dyn78TdDUzX82T0ypA

Und mehr von MDN:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString

80
Stu Stein 5 Juni 2014 im 07:18

Erstellen Sie das Datumsobjekt nicht mit einer Uhrzeit, damit beide um Mitternacht generiert werden. Dann überprüfen Sie einfach die Epochenzeit.

new Date('11/12/2012').getTime() === new Date('11/11/2012').getTime()
> false
new Date('11/12/2012').getTime() === new Date('11/12/2012').getTime()
> true
new Date('November 12, 2012').getTime() === new Date('11/12/2012').getTime()
> true
new Date('12 November, 2012').getTime() === new Date('11/12/2012').getTime()
> true

Die Daten müssen nur vom Objekt Date analysiert werden (ich bin in der Beta-Version von Chrome 23.0.1271.17 (Official Build 159779)). Wenn Sie keine Zeit überschreiten, werden sie um Mitternacht generiert.

Wenn Sie Zeit haben, lassen Sie sie einfach auf den Boden fallen und testen Sie sie gegen Mitternacht.

0
tkone 9 Okt. 2012 im 14:54
function getStartOfDay(aDate){
    //returns the very beginning of the same day
    return new Date(aDate.getTime() - aDate.getTime() % 86400000);
}

var aDate1 = getStartOfDay(new Date());
var aDate2 = getStartOfDay(new Date(1981, 7, 3));

var result = aDate1.getTime() === aDate2.getTime();
1
David 9 März 2016 im 16:29
function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}

var now =new Date();
var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var endDate = new Date(2017, 0, 13)

var result = isEqual(startDate , endDate);
console.log(result);
0
sada khanpit 13 Jän. 2017 im 04:37

Verwenden Sie eine startOf -Methode für Instanzen von Date:

dateA.startOf('day').getTime() === dateB.startOf('day').getTime()

Hier ist die Methode:

Date.prototype.startOf = function(unit) {
    var clone = new Date(this.getTime()), day;
    /* */if (unit === 'second') clone.setMilliseconds(0);
    else if (unit === 'minute') clone.setSeconds(0,0);
    else if (unit === 'hour'  ) clone.setMinutes(0,0,0);
    else {
        clone.setHours(0,0,0,0);
        if (unit === 'week') {
            day = clone.getDay();
            clone = day ? new Date(clone - 1000 * 60 * 60 * 24 * day) : clone;
        }
        else if (unit === 'month') clone.setDate(1);
        else if (unit === 'year' ) clone.setMonth(0,1);
    }
    return clone;
};
0
Web_Designer 13 Jän. 2017 im 04:52

Wie wäre es mit einer Überprüfung für denselben Tag, Monat und Jahr:

var isSameDay = (dateToCheck.getDate() == actualDate.getDate() 
        && dateToCheck.getMonth() == actualDate.getMonth()
        && dateToCheck.getFullYear() == actualDate.getFullYear())
22
Jamiec 9 Okt. 2012 im 15:23

Es wäre am sichersten, Tag, Monat und Jahr zu überprüfen:

var isNotToday = dateToCheck.getDate() != actualDate.getDate()
      || dateToCheck.getMonth() != actualDate.getMonth()
      || dateToCheck.getFullYear() != actualDate.getFullYear();

Dies stellt sicher, dass Sie keine Seltsamkeiten in Bezug auf die Sommerzeit und Schaltjahre bekommen, die sonst stören könnten.

6
Niet the Dark Absol 9 Okt. 2012 im 14:52