539 Stimmen

Vergleich nur des Datumsteils ohne Zeitvergleich in JavaScript

Was ist mit dem unten stehenden Code falsch?

Vielleicht wäre es einfacher, nur das Datum und nicht die Uhrzeit zu vergleichen. Ich bin mir auch nicht sicher, wie man das macht, und ich habe gesucht, aber ich konnte mein Problem nicht genau finden.

Übrigens, wenn ich die beiden Daten in einer Warnmeldung anzeige, sind sie genau gleich.

Mein Code:

window.addEvent('domready', function() {
    var now = new Date();
    var input = $('datum').getValue();
    var dateArray = input.split('/');
    var userMonth = parseInt(dateArray[1])-1;
    var userDate = new Date();
    userDate.setFullYear(dateArray[2], userMonth, dateArray[0], now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());

    if (userDate > now)
    {
        alert(now + '\n' + userDate);
    }
});

Gibt es eine einfachere Möglichkeit, Daten zu vergleichen, ohne die Uhrzeit anzugeben?

8 Stimmen

date1.toDateString() === date2.toDateString()

0 Stimmen

Von den Toten auferstanden: Ich erhalte fehlerhafte Ergebnisse von date.setFullYear(yyyy,mm,dd) Wenn ich toSting auf das Datum anwende, wird der Monat um 1 erhöht. Getestet auf dieser Seite Link sowohl in FireFox als auch in Edge.

1voto

Miguel Punkte 3471

Sie können mit der Gesamtzahl von ms etwas rechnen.

var date = new Date(date1);
date.setHours(0, 0, 0, 0);

var diff = date2.getTime() - date.getTime();
return diff >= 0 && diff < 86400000;

Ich mag das, weil keine Aktualisierungen an den ursprünglichen Daten vorgenommen werden und es schneller geht als String Split und Compare.

Ich hoffe, das hilft!

1voto

Vergleiche mit setHours() wird eine Lösung sein. Beispiel:

var d1 = new Date();
var d2 = new Date("2019-2-23");
if(d1.setHours(0,0,0,0) == d2.setHours(0,0,0,0)){
    console.log(true)
}else{
    console.log(false)
}

1voto

Pritesh Singh Punkte 31
var fromdate = new Date(MM/DD/YYYY);
var todate = new Date(MM/DD/YYYY);
if (fromdate > todate){
    console.log('False');
}else{
    console.log('True');
}

Wenn Ihr Datumsformat anders ist, verwenden Sie moment.js Bibliothek, um das Format Ihres Datums zu konvertieren, und verwenden Sie dann den obigen Code, um zwei Daten zu vergleichen

Beispiel:

Wenn Ihr Datum in "DD/MM/YYYY" angegeben ist und in "MM/DD/YYYY" umgewandelt werden soll, sehen Sie sich das folgende Codebeispiel an

var newfromdate = new Date(moment(fromdate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newfromdate);
var newtodate = new Date(moment(todate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newtodate);

1voto

Alex K. Punkte 165323

Stellen Sie sicher, dass Sie die userDate mit einer 4-stelligen Jahreszahl als setFullYear(10, ...) !== setFullYear(2010, ...) .

0voto

SridharKritha Punkte 6415

Vergleichen Sie Datum und Uhrzeit:

var t1 = new Date(); // say, in ISO String =  '2022-01-21T12:30:15.422Z'
var t2 = new Date(); // say, in ISO String =  '2022-01-21T12:30:15.328Z'
var t3 = t1;

Vergleich von 2 Datumsobjekten auf Millisekundenebene:

console.log(t1 === t2); // false - Bcos there is some milliseconds difference
console.log(t1 === t3); // true - Both dates have milliseconds level same values

2 Datumsobjekte NUR nach Datum vergleichen (Zeitunterschied ignorieren):

console.log(t1.toISOString().split('T')[0] === t2.toISOString().split('T')[0]); 
                                        // true; '2022-01-21' === '2022-01-21'

Vergleich von 2 Datumsobjekten NUR anhand der Zeit(ms) (Ignorieren einer Datumsdifferenz):

console.log(t1.toISOString().split('T')[1] === t3.toISOString().split('T')[1]); 
                                      // true; '12:30:15.422Z' === '12:30:15.422Z'

Die obigen 2 Methoden verwenden toISOString() Methode, damit Sie pas de Sie müssen sich um die Zeitzonenunterschied in den einzelnen Ländern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X