2791 Stimmen

Zwei Daten mit JavaScript vergleichen

Kann jemand einen Vorschlag machen, wie man die Werte von zwei Daten größer als, kleiner als, und nicht in der Vergangenheit mit JavaScript? Die Werte werden aus Textfeldern stammen.

20 Stimmen

Wenn es um DateTime und Manipulation in JS geht, suche ich nicht weiter als momentjs :)

101 Stimmen

Keine Notwendigkeit, Momentjs zu verwenden, um 2 Daten zu vergleichen. Verwenden Sie einfach reines Javascript's Date Objekt. Prüfen Sie die Hauptantwort für weitere Details.

0 Stimmen

Sie können die folgende Antwort lesen: stackoverflow.com/questions/4812152/ Prüfen Sie getDateDifference und getDifferenceInDays, ob es helfen kann.

13voto

bbsimonbb Punkte 23637

BEACHTEN SIE DIE ZEITZONE

Ein Javascript-Datum hat keine Kenntnis der Zeitzone . Es ist ein Moment in der Zeit (Ticks seit der Epoche) mit praktischen Funktionen für die Übersetzung in und aus Strings in der "lokalen" Zeitzone. Wenn Sie mit Datumsangaben arbeiten möchten, indem Sie Datumsobjekte verwenden, wie es jeder hier tut, Sie möchten, dass Ihre Daten UTC-Mitternacht zu Beginn des betreffenden Datums entsprechen. Dies ist eine gängige und notwendige Konvention, die es Ihnen ermöglicht, mit Daten unabhängig von der Jahreszeit oder Zeitzone ihrer Erstellung zu arbeiten. Sie müssen also sehr wachsam sein, um den Begriff der Zeitzone zu verwalten, insbesondere wenn Sie Ihr Mitternachts-UTC-Datumsobjekt erstellen.

In den meisten Fällen soll das Datum die Zeitzone des Benutzers widerspiegeln. Klicken Sie, wenn Sie heute Geburtstag haben . Benutzer in Neuseeland und den USA klicken zur gleichen Zeit und erhalten unterschiedliche Daten. In diesem Fall, tun Sie dies...

// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));

Manchmal übertrifft die internationale Vergleichbarkeit die lokale Genauigkeit. In diesem Fall sollten Sie dies tun...

// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));

Jetzt können Sie Ihre Datumsobjekte direkt vergleichen, wie es die anderen Antworten vorschlagen.

Nachdem Sie bei der Erstellung darauf geachtet haben, die Zeitzone zu verwalten, müssen Sie auch bei der Rückkonvertierung in eine String-Darstellung darauf achten, dass die Zeitzone nicht berücksichtigt wird. So können Sie sicher verwenden...

  • toISOString()
  • getUTCxxx()
  • getTime() //returns a number with no time or timezone.
  • .toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.

Und vermeiden Sie alles andere, vor allem...

  • getYear() , getMonth() , getDate()

11voto

Paul Punkte 4058

Um den vielen bestehenden Möglichkeiten noch eine weitere hinzuzufügen, könnten Sie es versuchen:

if (date1.valueOf()==date2.valueOf()) .....

...was bei mir zu funktionieren scheint. Natürlich müssen Sie sicherstellen, dass beide Daten nicht undefiniert sind...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

Auf diese Weise können wir sicherstellen, dass ein positiver Vergleich durchgeführt wird, wenn beide auch undefiniert sind, oder...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

...wenn Sie es vorziehen, dass sie nicht gleich sind.

10voto

totten Punkte 2649

Wenn Ihr Datumsformat das folgende ist, können Sie diesen Code verwenden:

var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}

Es wird geprüft, ob 20121121 Zahl größer ist als 20121103 oder nicht.

6 Stimmen

Wenn sie bereits im ISO8601-Format (JJJJ-MM-TT) vorliegt, brauchen Sie keine Zeichen zu entfernen oder sie in eine Ganzzahl umzuwandeln. Vergleichen Sie einfach die Zeichenketten first == second o first < second o first > second . Das ist eine der vielen Vorzüge von ISO8601 im Vergleich zu MM/TT/JJ, TT/MM/JJ, JJ/TT/MM, TT/JJ/MM oder MM/JJ/TT.

9voto

foobar Punkte 9884

Angenommen, Sie haben die Datumsobjekte A und B, ermitteln deren EPOC-Zeitwert und subtrahieren dann die Differenz in Millisekunden.

var diff = +A - +B;

Das ist alles.

9voto

Salahin Rocky Punkte 385

Um zwei Daten zu vergleichen, können wir die JavaScript-Bibliothek date.js verwenden, die Sie unter : https://code.google.com/archive/p/datejs/downloads

und verwenden Sie die Date.compare( Date date1, Date date2 ) Methode und sie gibt eine Nummer was das folgende Ergebnis bedeutet:

-1 = Datum1 ist kleiner als Datum2.

0 = die Werte sind gleich.

1 = Datum1 ist größer als Datum2.

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