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.

3voto

NICHOLAS WOJNAR Punkte 57

Dieses JS wird den Inhalt nach dem eingestellten Datum ändern hier ist die gleiche Sache, aber auf w3schools

date1 = new Date()
date2 = new Date(2019,5,2) //the date you are comparing

date1.setHours(0,0,0,0)

var stockcnt = document.getElementById('demo').innerHTML;
if (date1 > date2){
document.getElementById('demo').innerHTML="yes"; //change if date is > set date (date2)
}else{
document.getElementById('demo').innerHTML="hello"; //change if date is < set date (date2)
}

<p id="demo">hello</p> <!--What will be changed-->
<!--if you check back in tomorrow, it will say yes instead of hello... or you could change the date... or change > to <-->

2voto

Yogesh Devgun Punkte 999

Das funktioniert bei mir:

 export default (chosenDate) => {
  const now = new Date();
  const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
  const splitChosenDate = chosenDate.split('/');

  today.setHours(0, 0, 0, 0);
  const fromDate = today.getTime();
  const toDate = new Date(splitChosenDate[2], splitChosenDate[1] - 1, splitChosenDate[0]).getTime();

  return toDate < fromDate;
};

In der akzeptierten Antwort gibt es ein Problem mit der Zeitzone und in der anderen Zeit ist nicht 00:00:00

2voto

El datum.js Bibliothek ist für diese Dinge sehr nützlich. Es macht alle JS Datum-bezogene Skripte viel einfacher.

18 Stimmen

Können Sie mehr Informationen darüber geben, wie diese Bibliothek dies erleichtert?

2voto

Aleks Punkte 4415

Nachdem ich diese Frage recht schnell nach ihrer Veröffentlichung gelesen habe, habe ich beschlossen, eine andere Lösung zu posten, da ich sie nicht ganz zufriedenstellend fand, zumindest für meine Bedürfnisse:

Ich habe etwas Ähnliches verwendet:

var currentDate= new Date().setHours(0,0,0,0);

var startDay = new Date(currentDate - 86400000 * 2);
var finalDay = new Date(currentDate + 86400000 * 2);

Auf diese Weise hätte ich die Daten in dem von mir gewünschten Format für die spätere Bearbeitung verwenden können. Aber das war nur für meinen Bedarf, aber ich habe beschlossen, es trotzdem zu posten, vielleicht hilft es ja jemandem

1 Stimmen

Bitte beachten Sie Ihre currentDate ist kein Datum, sondern eine Anzahl von Millisekunden seit dem 1970-01-01. Die setHours() Methode ändert das Datumsobjekt, mit dem sie aufgerufen wird, und gibt das Äquivalent von getTime() (Wert des Datums in Millisekunden seit 1970-01-01).

2voto

Fabrizio Punkte 3674

Ich mache das so:

var myDate  = new Date($('input[name=frequency_start]').val()).setHours(0,0,0,0);
var today   = new Date().setHours(0,0,0,0);
if(today>myDate){
    jAlert('Please Enter a date in the future','Date Start Error', function(){
        $('input[name=frequency_start]').focus().select();
    });
}

0 Stimmen

Ich verwende dies derzeit in der Produktion und ich habe kein Problem oder Browser-Inkompatibilität etc... irgendwelche Gründe, warum Sie sagen, dass getTime() erforderlich ist ?

5 Stimmen

Bitte beachten Sie, dass setHours() ändert das Objekt, mit dem es aufgerufen wird, und gibt das Datum als Anzahl von Millisekunden zurück (entspricht dem Aufruf von getTime() ). Daher ist Ihr today Variable ist keine Date Objekt, wie man es erwarten würde, sondern eine ganzzahlige Zahl von Millisekunden. Als Nebeneffekt ist dies der Grund, warum Sie nicht getTime() bevor Sie vergleichen, denn das haben Sie ja schon auf eine unklare Art und Weise getan.

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