Quelqu'un peut-il suggérer une façon de comparer les valeurs des deux dates de supérieures à, inférieur et non dans le passé à l’aide de javascript ? Les valeurs fera son apparition de zones de texte.
Réponses
Trop de publicités?L' objet Date fera ce que vous voulez - construisez-en un pour chaque date, puis comparez-les en utilisant les opérateurs habituels.
Je vous suggère d'utiliser des listes déroulantes ou une forme d'entrée de date similaire plutôt que des zones de texte, de peur de vous retrouver dans l'enfer de la validation des entrées.
Comparez <
et >
comme d'habitude, mais tout ce qui implique =
devrait utiliser un préfixe +
. Ainsi:
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
J'espère que cela t'aides!
Le moyen le plus facile de comparer des dates en javascript est d'abord le convertir en un objet Date, puis de comparer ces jour-objets.
Vous trouverez ci-dessous un objet à trois fonctions:
-
des dates.comparer(a,b)
Renvoie un nombre:
- -1 si a < b
- 0 si a = b
- 1 si a > b
- NaN si a ou b est illégal date
-
des dates.inRange (d,début,fin)
Retourne un booléen ou NaN:
- vrai si d est entre le début et la fin (inclus)
- faux si d est avant le début ou après la fin.
- NaN si une ou plusieurs dates sont illégales.
-
des dates.convertir
Utilisé par les autres fonctions de convertir leur entrée à un objet date. L'entrée peut être
- une date-objet : L'entrée est rendu comme tel.
- un tableau: Interprété comme [jour,mois,année]. NOTE de 0 à 11 mois est.
- un nombre : Interprétée comme le nombre de millisecondes depuis le 1er janvier 1970 (timestamp)
- une chaîne de caractères : Plusieurs formats différents est pris en charge, comme "YYYY/MM/DD", "MM/DD/YYYY", "31 Jan 2009", etc.
- un objet: Interprétée comme un objet avec l'année, le mois et la date attributs. NOTE de 0 à 11 mois est.
.
// 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
);
}
}
Mis à jour le 26 Février 2011 avec la documentation dans le code (le code est modification).
Deux JavaScript Date d'objets peuvent être comparées à l'aide d' <
et >
:
var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 < d2; // true
Mais vous ne pouvez pas utiliser ==
et ===
parce que:
- Deux objets distincts ne sont jamais égaux, soit strictement ou le résumé des comparaisons
- Une expression Objets de comparaison n'est vrai que si les opérandes de référence au même Objet
Cependant, les valeurs contenues dans JavaScript Dates peuvent être comparés pour l'égalité:
var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
d1 == d2; // false
d1 === d2; // false
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1) == Number(d2); // true