without - javascript string vergleichen




Vergleichen Sie zwei Daten mit JavaScript (20)

Kann jemand einen Weg vorschlagen, die Werte von zwei Datumsangaben größer, kleiner als und nicht in der Vergangenheit mit JavaScript zu vergleichen? Die Werte werden von Textfeldern kommen ...


Angenommen, Sie haben die Datumsobjekte A und B, erhalten ihren EPOC-Zeitwert und subtrahieren, um die Differenz in Millisekunden zu erhalten.

var diff = +A - +B;

Das ist alles.


Das Vergleichen von Daten in JavaScript ist ziemlich einfach ... JavaScript hat ein integriertes Vergleichssystem für Daten, das den Vergleich so einfach macht ...

Befolgen Sie einfach diese Schritte zum Vergleichen von 2 Datenwerten, zum Beispiel haben Sie 2 Eingaben, die jeweils einen Date-Wert in String und Sie können sie vergleichen ...

1. Sie haben 2 String-Werte, die Sie aus einer Eingabe erhalten, und Sie möchten sie vergleichen, sie sind wie folgt:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Sie müssen Date Object , um als Datumswerte verglichen zu werden, also wandeln Sie sie einfach in Datum um, indem Sie new Date() , ich ordne sie einfach zur Vereinfachung der Erklärung neu zu, aber Sie können es trotzdem tun, wie Sie wollen:

date1 = new Date(date1);
date2 = new Date(date2);

3. Vergleichen Sie sie nun einfach mit dem > < >= <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true


Die einfachste Methode ist es, ein Datum von dem anderen zu subtrahieren und das Ergebnis zu vergleichen.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);

Die relationalen Operatoren >= können zum Vergleichen von JavaScript-Daten verwendet werden:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

Die Gleichheitsoperatoren == != === !== können jedoch nicht zum Vergleichen von (dem Wert von) Daten verwendet werden, because :

  • Zwei verschiedene Objekte sind niemals gleich für entweder strenge oder abstrakte Vergleiche.
  • Ein Ausdruck, der Objekte vergleicht, ist nur wahr, wenn die Operanden auf dasselbe Objekt verweisen.

Sie können den Wert von Daten für die Gleichheit mit einer der folgenden Methoden vergleichen:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Sowohl Date.getTime() als auch Date.valueOf() geben die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00 UTC, zurück. Sowohl die Funktion Number als auch der Operator valueOf() + rufen die valueOf() hinter den Szenen auf.


Eine verbesserte Version des Codes von "einigen"

/* Compare the current date against another date.
 *
 * @param b  {Date} the other date
 * @returns   -1 : if this < b
 *             0 : if this === b
 *             1 : if this > b
 *            NaN : if a or b is an illegal date
*/ 
Date.prototype.compare = function(b) {
  if (b.constructor !== Date) {
    throw "invalid_date";
  }

 return (isFinite(this.valueOf()) && isFinite(b.valueOf()) ? 
          (this>b)-(this<b) : NaN 
        );
};

Verwendung:

  var a = new Date(2011, 1-1, 1);
  var b = new Date(2011, 1-1, 1);
  var c = new Date(2011, 1-1, 31);
  var d = new Date(2011, 1-1, 31);

  assertEquals( 0, a.compare(b));
  assertEquals( 0, b.compare(a));
  assertEquals(-1, a.compare(c));
  assertEquals( 1, c.compare(a));

Hallo Hier ist mein Code, um Daten zu vergleichen. In meinem Fall mache ich einen Check, um nicht zu erlauben, vergangene Daten auszuwählen.

var myPickupDate = <pick up date> ;
var isPastPickupDateSelected = false;
var currentDate = new Date();

if(currentDate.getFullYear() <= myPickupDate.getFullYear()){
    if(currentDate.getMonth()+1 <= myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                        if(currentDate.getDate() <= myPickupDate.getDate() || currentDate.getMonth()+1 < myPickupDate.getMonth()+1 || currentDate.getFullYear() < myPickupDate.getFullYear()){
                                            isPastPickupDateSelected = false;
                                            return;
                                        }
                    }
}
console.log("cannot select past pickup date");
isPastPickupDateSelected = true;

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

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

wandle es in Date Object um und vergleiche es dann mit > < falls nötig.

Beachten Sie, dass == oder === nicht ordnungsgemäß funktioniert, es sei denn, Ihre Variablen sind Verweise auf dasselbe Date-Objekt.

Konvertieren Sie diese Date-Objekte zuerst in den Timestamp (Zahl) und vergleichen Sie dann die Gleichheit von ihnen.

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 zum Datum

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

Nehmen wir an, dass Sie sich mit diesem 2014[:-/.]06[:-/.]06 oder diesem 06[:-/.]06[:-/.]2014 Datumsformat beschäftigen, dann können Sie die Daten auf diese Weise vergleichen

var a = '2014.06/07', b = '2014-06.07', c = '07-06/2014', d = '07/06.2014';

parseInt(a.replace(/[:\s\/\.-]/g, '')) == parseInt(b.replace(/[:\s\/\.-]/g, '')); // true
parseInt(c.replace(/[:\s\/\.-]/g, '')) == parseInt(d.replace(/[:\s\/\.-]/g, '')); // true
parseInt(a.replace(/[:\s\/\.-]/g, '')) < parseInt(b.replace(/[:\s\/\.-]/g, '')); // false
parseInt(c.replace(/[:\s\/\.-]/g, '')) > parseInt(d.replace(/[:\s\/\.-]/g, '')); // false

Wie Sie sehen können, entfernen wir Separatoren und vergleichen ganze Zahlen.


Subtrahieren Sie zwei Datum erhalten Sie den Unterschied in Millisekunde, wenn Sie 0 es das gleiche Datum

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

Um Daten aus Freitext in Javascript zu erstellen, müssen Sie sie in das Date () -Objekt einlesen.

Sie könnten Date.parse () verwenden, das versucht, freien Text in ein neues Datum zu konvertieren, aber wenn Sie die Kontrolle über die Seite haben, würde ich stattdessen HTML-Auswahlfelder oder eine Datumsauswahl wie das YUI-Kalendersteuerelement oder die jQuery-Benutzeroberfläche empfehlen Datumsauswahl .

Sobald Sie ein Datum haben, auf das andere Personen hingewiesen haben, können Sie die Daten durch einfache Arithmetik abziehen und in eine Anzahl von Tagen zurückrechnen, indem Sie die Anzahl (in Sekunden) durch die Anzahl der Sekunden eines Tages dividieren (60 * 60 *). 24 = 86400).


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 ) und geben Sie eine Zahl zurück , die folgendes Ergebnis bedeutet:

-1 = Datum1 ist kleiner als Datum2.

0 = Werte sind gleich.

1 = Datum1 ist größer als Datum2.


Vergleichen Sie < und > wie üblich, aber alles mit = sollte ein Präfix + . Wie so:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y;  => true
+x >= +y;  => true
+x === +y; => true

Hoffe das hilft!


Welches Format?

Wenn Sie ein Javascript- Date-Objekt erstellen, können Sie sie einfach subtrahieren, um einen Millisekunden-Unterschied zu erhalten (edit: oder vergleichen Sie sie einfach):

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true

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 überprüft, ob 20121121 größer ist als 20121103 oder nicht.


ACHTUNG DIE ZEITZONE

Ein Javascript-Datum hat keine Ahnung von Zeitzone . Es ist ein Moment in der Zeit (tickt seit der Epoche) mit praktischen Funktionen für das Übersetzen von und in Strings in der "lokalen" Zeitzone. Wenn Sie mit Datumsangaben arbeiten möchten, wie alle hier tun, möchten Sie, dass Ihre Daten UTC Mitternacht zu Beginn des betreffenden Datums darstellen. Dies ist eine übliche und notwendige Konvention, mit der Sie unabhängig von der Jahreszeit oder Zeitzone ihrer Erstellung mit Daten arbeiten können. Sie müssen daher sehr wachsam sein, um den Begriff der Zeitzone zu verwalten, insbesondere wenn Sie Ihr UTC-Date-Objekt für Mitternacht erstellen.

Meistens möchten Sie, dass Ihr Datum die Zeitzone des Benutzers widerspiegelt. Klicken Sie auf, wenn Sie heute Geburtstag haben . Benutzer in NZ und USA klicken gleichzeitig und erhalten unterschiedliche Daten. In diesem Fall, mach das ...

// 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, mach das ...

// 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 die anderen Antworten vorschlagen.

Nachdem Sie beim Erstellen die Zeitzone verwaltet haben, müssen Sie auch sicherstellen, dass die Zeitzone bei der Konvertierung in eine Zeichenfolgendarstellung nicht überschritten 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 vermeide alles andere, besonders ...

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

Hinweis - Nur Datumsteil vergleichen:

Wenn wir zwei Datum in Javascript vergleichen. Es dauert auch Stunden, Minuten und Sekunden. Also, wenn wir nur Datum nur vergleichen müssen, ist dies der Ansatz:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

Jetzt: if date1.valueOf()> date2.valueOf() funktioniert wie ein Zauber.


Das Date-Objekt wird tun, was Sie wollen - konstruieren Sie für jedes Datum eine, und vergleichen Sie sie dann mit den > , < , <= oder >= .

Die == === != , === und !== erfordern, dass Sie date.getTime() wie in verwenden

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

um klar zu sein, nur die Gleichheit direkt mit den Datenobjekten zu überprüfen, wird nicht funktionieren

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Ich schlage vor, dass Sie Drop-downs oder eine ähnliche eingeschränkte Form der Datumseingabe anstelle von Textfeldern verwenden, damit Sie sich nicht in der Hölle der Eingabevalidierung befinden.


        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }

Verwenden Sie diesen Code, um das Datum mit Javascript zu vergleichen.

Danke D.Jeeva


var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}

var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates




compare