Frage Vergleichen Sie zwei Daten mit JavaScript


Kann jemand vorschlagen, die Werte von zwei Daten größer als, weniger als und nicht in der Vergangenheit mit JavaScript? Die Werte werden von Textfeldern kommen ...


1374
2018-01-29 19:14


Ursprung


Antworten:


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

Das ==, !=, ===, und !== Betreiber benötigen Sie zu verwenden date.getTime() wie in

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.


1563
2018-01-29 19:20



Der einfachste Weg, Daten in Javascript zu vergleichen, besteht darin, sie zuerst in ein Date-Objekt zu konvertieren und dann diese Datumsobjekte zu vergleichen.

Im Folgenden finden Sie ein Objekt mit drei Funktionen:

  • dates.compare (a, b)

    Gibt eine Zahl zurück:

    • -1 wenn a <b
    • 0 wenn a = b
    • 1 falls a> b
    • NaN wenn a oder b ein illegales Datum ist
  • dates.inRange (d, Anfang, Ende)

    Liefert einen booleschen Wert oder NaN:

    • wahr ob d ist zwischen den Anfang und Ende (inklusive)
    • falsch ob d ist vorher Anfang oder danach Ende.
    • NaN, wenn eines oder mehrere der Daten illegal sind.
  • Daten.konvertieren

    Wird von den anderen Funktionen verwendet, um ihre Eingabe in ein Datumsobjekt zu konvertieren. Die Eingabe kann sein

    • ein Datum-object: Die Eingabe wird unverändert zurückgegeben.
    • ein Array: Als [Jahr, Monat, Tag] interpretiert. HINWEIS Monat ist 0-11.
    • ein Nummer : Interpretiert als Anzahl der Millisekunden seit dem 1. Januar 1970 (ein Zeitstempel)
    • ein Zeichenfolge : Verschiedene Formate werden unterstützt, wie "JJJJ / MM / TT", "MM / TT / JJJJ", "31. Jan. 2009" usw.
    • ein Objekt: Wird als Objekt mit den Attributen Jahr, Monat und Datum interpretiert. HINWEIS Monat ist 0-11.

.

// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

374
2018-01-31 00:18



Vergleichen < und > wie immer, aber alles was dazugehört = sollte eine verwenden + 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!


221
2018-05-23 12:21



Die relationalen Operatoren <  <=  >  >= kann verwendet werden, um JavaScript-Daten zu vergleichen:

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 jedoch ==  !=  ===  !== kann nicht zum Vergleichen (der Wert von) Daten verwendet werden weil:

  • 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

Beide Date.getTime() und Date.valueOf() Gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00 UTC zurück. Beide Number Funktion und unär + Betreiber ruft die valueOf() Methoden hinter den Kulissen.


124
2018-01-31 16:04



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);

63
2017-11-01 00:48



Nur Tag vergleichen (Zeitkomponente ignorieren):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Verwendung:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}

30
2017-09-27 15:38



Vergleichen Termine in JavaScript ist ziemlich einfach ... JavaScript hat eingebaut Vergleichssystem für Termine was den Vergleich so einfach macht ...

Befolgen Sie diese Schritte zum Vergleichen von 2 Datenwerten, zum Beispiel haben Sie 2 Eingaben, die jeweils einen Date-Wert haben String und du vergleichst sie ...

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 sein Date Object Als Datumswerte vergleichen, also einfach mit Datum in Datum umrechnen new Date(), Ich ordne sie einfach zur Vereinfachung der Erklärung um, aber du kannst es trotzdem tun, wie du es magst:

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

3. Jetzt vergleiche sie einfach mit dem >  <  >=  <=

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

compare dates in javascript


28
2017-07-11 09:59



Welches Format?

Wenn Sie ein Javascript erstellen DatumsobjektSie können sie einfach subtrahieren, um einen Unterschied von Millisekunden zu erhalten (Bearbeiten: 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

25
2018-01-29 19:19



function datesEqual(a, b)
{
   return (!(a>b || b>a))
}

13
2017-07-20 03:36



Du benutzt diesen Code,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

Und auch diesen Link überprüfen http://www.w3schools.com/js/js_obj_date.asp


13
2017-08-09 10:49