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 ...
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 ...
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.
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:
dates.inRange (d, Anfang, Ende)
Liefert einen booleschen Wert oder NaN:
Daten.konvertieren
Wird von den anderen Funktionen verwendet, um ihre Eingabe in ein Datumsobjekt zu konvertieren. Die Eingabe kann sein
.
// 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
);
}
}
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!
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.
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);
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
}
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
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
function datesEqual(a, b)
{
return (!(a>b || b>a))
}
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