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.

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.

7voto

Kamil Kiełczewski Punkte 69048

Leistung

Heute 2020.02.27 führe ich Tests der gewählten Lösungen auf Chrome v80.0, Safari v13.0.5 und Firefox 73.0.1 auf MacOs High Sierra v10.13.6 durch

Schlussfolgerungen

  • Lösungen d1==d2 (D) und d1===d2 (E) sind bei allen Browsern am schnellsten
  • Lösung getTime (A) ist schneller als valueOf (B) (beide sind mittelschnell)
  • die Lösungen F,L,N sind bei allen Browsern am langsamsten

enter image description here

Einzelheiten

Im folgenden Ausschnitt werden die in den Leistungstests verwendeten Lösungen vorgestellt. Sie können den Test auf Ihrem Rechner durchführen HIER

function A(d1,d2) {
    return d1.getTime() == d2.getTime();
}

function B(d1,d2) {
    return d1.valueOf() == d2.valueOf();
}

function C(d1,d2) {
    return Number(d1)   == Number(d2);
}

function D(d1,d2) {
    return d1 == d2;
}

function E(d1,d2) {
    return d1 === d2;
}

function F(d1,d2) {
    return (!(d1>d2 || d2>d1));
}

function G(d1,d2) {
    return d1*1 == d2*1;
}

function H(d1,d2) {
    return +d1 == +d2;
}

function I(d1,d2) {
    return !(+d1 - +d2);
}

function J(d1,d2) {
    return !(d1 - d2);
}

function K(d1,d2) {
    return d1 - d2 == 0;
}

function L(d1,d2) {
    return !((d1>d2)-(d1<d2));
}

function M(d1,d2) {
  return d1.getFullYear() === d2.getFullYear()
    && d1.getDate() === d2.getDate()
    && d1.getMonth() === d2.getMonth();
}

function N(d1,d2) {
    return (isFinite(d1.valueOf()) && isFinite(d2.valueOf()) ? !((d1>d2)-(d1<d2)) : false );
}

// TEST

let past= new Date('2002-12-24'); // past
let now= new Date('2020-02-26');  // now

console.log('Code  d1>d2  d1<d2  d1=d2')
var log = (l,f) => console.log(`${l}     ${f(now,past)}  ${f(past,now)}  ${f(now,now)}`);

log('A',A);
log('B',B);
log('C',C);
log('D',D);
log('E',E);
log('G',G);
log('H',H);
log('I',I);
log('J',J);
log('K',K);
log('L',L);
log('M',M);
log('N',N);

p {color: red}

<p>This snippet only presents tested solutions (it not perform tests itself)</p>

Ergebnisse für Chrom

enter image description here

5 Stimmen

Aber d1==d2 o d1===d2 ist im Zusammenhang mit der Frage nutzlos.

7voto

sh1mmer Punkte 1316

Um Datumsangaben aus freiem Text in Javascript zu erstellen, müssen Sie ihn in das Date()-Objekt zerlegen.

Sie könnten Date.parse() verwenden, die freien Text nimmt und versucht, ihn in ein neues Datum umzuwandeln, aber wenn Sie die Kontrolle über die Seite haben, würde ich empfehlen, stattdessen HTML-Auswahlfelder oder einen Datums-Picker wie den zu verwenden YUI-Kalender-Steuerelement o el jQuery UI Datepicker .

Sobald Sie ein Datum haben, können Sie, wie bereits von anderen erwähnt, mit einfacher Arithmetik die Daten subtrahieren und in eine Anzahl von Tagen umrechnen, indem Sie die Zahl (in Sekunden) durch die Anzahl der Sekunden eines Tages teilen (60*60*24 = 86400).

6voto

vickisys Punkte 1928
var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function

var input_date="2015/04/22 11:12 AM";

var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime   = new Date(Date.parse(input_date));

if (inputDateTime <= currentDateTime){
    //Do something...
}

function formatDate(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';

    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    hours   = hours < 10 ? '0'+hours : hours ;

    minutes = minutes < 10 ? '0'+minutes : minutes;

    var strTime = hours+":"+minutes+ ' ' + ampm;
    return  date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
    (date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
    date.getDate()) + " " + strTime;
}

5voto

jwchang Punkte 10203

Ich speichere normalerweise Dates als timestamps(Number) in Datenbanken.

Wenn ich vergleichen muss, vergleiche ich einfach zwischen diesen Zeitstempeln oder

in Date Object umwandeln und dann mit > < falls erforderlich.

Beachten Sie, dass == oder === nicht richtig funktioniert, es sei denn, Ihre Variablen sind Referenzen desselben Datumsobjekts.

Konvertieren Sie diese Datumsobjekte zunächst in timestamp(number) und vergleichen Sie dann die Gleichheit der Objekte.


Datum bis Zeitstempel

var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp

Zeitstempel bis Datum

var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);

0 Stimmen

Das ist die beste Antwort - und die schnellste jsperf.com/vergleich-datum-objekten

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