Peut-on suggérer un moyen de comparer les valeurs de deux dates supérieures à, inférieures à, et pas dans le passé en utilisant JavaScript? Les valeurs proviendront des zones de texte.
Le objet Date fera ce que vous voulez - construisez-en un pour chaque date, puis comparez-les à l'aide du >
, <
, <=
ou >=
.
Les opérateurs ==
, !=
, ===
et !==
exigent que vous utilisiez date.getTime()
comme dans
var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();
être clair en vérifiant l'égalité directement avec les objets de données ne fonctionnera pas
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)
Je vous suggère d'utiliser des listes déroulantes ou une forme similaire contrainte de saisie de la date plutôt que des zones de texte, cependant, de peur que vous ne vous trouviez dans l'enfer de la validation des entrées.
Le moyen le plus simple de comparer des dates en javascript consiste tout d'abord à le convertir en objet Date, puis à comparer ces objets date.
Ci-dessous vous trouvez un objet avec trois fonctions:
dates.compare (a, b)
Renvoie un nombre:
dates.inRange (d, début, fin)
Renvoie un booléen ou NaN:
dates.convert
Utilisé par les autres fonctions pour convertir leur entrée en objet date. L'entrée peut être
.
// 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
);
}
}
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!
Les opérateurs relationnels <
<=
>
>=
peuvent être utilisés pour comparer les dates JavaScript:
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
Toutefois, les opérateurs d'égalité ==
!=
===
!==
ne peuvent pas être utilisés pour comparer (la valeur de) dates car :
- Deux objets distincts ne sont jamais égaux pour les comparaisons strictes ou abstraites.
- Une expression comparant des objets n'est vraie que si les opérandes font référence au même objet.
Vous pouvez comparer la valeur des dates pour l'égalité en utilisant l'une des méthodes suivantes:
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
Les deux Date.getTime()
et Date.valueOf()
renvoient le nombre de millisecondes depuis le 1er janvier 1970 à 00:00 UTC. La fonction Number
et l'opérateur unaire +
appellent les méthodes valueOf()
dans les coulisses.
De loin, la méthode la plus simple consiste à soustraire une date à une autre et à comparer le résultat.
var oDateOne = new Date();
var oDateTwo = new Date();
alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);
La comparaison des dates en JavaScript est assez simple ... JavaScript est intégré système de comparaison pour dates , ce qui facilite grandement la comparaison ...
Il vous suffit de suivre ces étapes pour comparer deux valeurs de date. Par exemple, vous avez deux entrées dont chacune a une valeur de date dans String
et vous pouvez les comparer ...
1. vous avez 2 valeurs de chaîne que vous obtenez d'une entrée et vous souhaitez les comparer, elles sont comme ci-dessous:
var date1 = '01/12/2018';
var date2 = '12/12/2018';
2. Ils doivent être Date Object
pour pouvoir être comparés en tant que valeurs de date, il suffit donc de les convertir en date, en utilisant new Date()
, Je viens de les réaffecter pour des raisons de simplicité, mais vous pouvez le faire comme vous le souhaitez:
date1 = new Date(date1);
date2 = new Date(date2);
3. Maintenant, comparez-les simplement en utilisant le >
<
>=
<=
date1 > date2; //false
date1 < date2; //true
date1 >= date2; //false
date1 <= date2; //true
Comparer jour seulement (en ignorant la composante heure):
Date.prototype.sameDay = function(d) {
return this.getFullYear() === d.getFullYear()
&& this.getDate() === d.getDate()
&& this.getMonth() === d.getMonth();
}
Usage:
if(date1.sameDay(date2)) {
// highlight day on calendar or something else clever
}
quel format?
Si vous construisez un Javascript Date Object , vous pouvez simplement le soustraire pour obtenir une différence en millisecondes (édition: ou tout simplement les comparer):
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
REPONSE COURTE
Voici une fonction qui retourne {boolean} si from de dateTime> à dateTime démonstration en action
var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '
function isFromBiggerThanTo(dtmfrom, dtmto){
return new Date(dtmfrom).getTime() >= new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true
Explication
var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000
console.log(typeof timeStamp_date_one);//number
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000
console.log(typeof timeStamp_date_two);//number
puisque vous avez maintenant les deux date et heure en type nombre, vous pouvez les comparer avec toutes les opérations de comparaison
(>, <, =,! =, ==,! ==,> = AND <=)
Alors
si vous connaissez C#
Format personnalisé de chaîne de date et d'heure, cette bibliothèque devrait faire exactement la même chose et vous aider à formater votre date et heure dtmFRM si vous transmettez une chaîne de date/heure ou unix format
Utilisation
var myDateTime = new dtmFRM();
alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM
alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday
alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21
tout ce que vous avez à faire est de passer l’un de ces formats dans le fichier bibliothèque js
vous utilisez ce 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");
}
Et vérifiez également ce lien http://www.w3schools.com/js/js_obj_date.asp
function datesEqual(a, b)
{
return (!(a>b || b>a))
}
Remarque - Comparer seulement la partie de date:
Quand on compare deux dates en javascript. Cela prend des heures, des minutes et des secondes également à prendre en considération. Donc, si nous avons seulement besoin de comparer la date seulement, voici l'approche:
var date1= new Date("01/01/2014").setHours(0,0,0,0);
var date2= new Date("01/01/2014").setHours(0,0,0,0);
Maintenant: if date1.valueOf()> date2.valueOf()
fonctionnera comme un charme.
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
Juste pour ajouter une autre possibilité aux nombreuses options existantes, vous pouvez essayer:
if (date1.valueOf()==date2.valueOf()) .....
... qui semble fonctionner pour moi. Bien sûr, vous devez vous assurer que les deux dates ne sont pas indéfinies ...
if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....
De cette façon, nous pouvons nous assurer qu'une comparaison positive est faite si les deux ne sont pas non plus définis, ou ...
if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....
... Si vous préférez qu'ils ne soient pas égaux.
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
function compare(dateTimeA, dateTimeB) {
var momentA = moment(dateTimeA,"DD/MM/YYYY");
var momentB = moment(dateTimeB,"DD/MM/YYYY");
if (momentA > momentB) return 1;
else if (momentA < momentB) return -1;
else return 0;
}
alert(compare("11/07/2015", "10/07/2015"));
La méthode retourne 1 si dateTimeA
est supérieur à dateTimeB
La méthode retourne 0 si dateTimeA
est égal à dateTimeB
La méthode retourne -1 si dateTimeA
est inférieur à dateTimeB
Méfiez-vous du fuseau horaire
Une date javascript n'a aucune notion de fuseau horaire . C'est un moment dans le temps (ticks depuis l'époque) avec des fonctions pratiques pour la traduction de chaînes dans le fuseau horaire "local". Si vous voulez utiliser des dates avec des objets de date, comme tout le monde, vous voulez que vos dates représentent UTC à minuit au début de la date en question. C’est une convention commune et nécessaire qui vous travaillez avec des dates indépendamment de la saison ou du fuseau horaire de leur création. Vous devez donc être très vigilant pour gérer la notion de fuseau horaire, en particulier lorsque vous créez votre objet Date minuit UTC.
La plupart du temps, vous voudrez que votre date reflète le fuseau horaire de l'utilisateur. Cliquez si aujourd'hui est votre anniversaire. Les utilisateurs en Nouvelle-Zélande et aux États-Unis cliquent en même temps et obtiennent des dates différentes. Dans ce cas, faites ceci ...
// 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()));
Parfois, la comparabilité internationale prime sur la précision locale. Dans ce cas, faites ceci ...
// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));
Vous pouvez maintenant comparer directement vos objets de date comme le suggèrent les autres réponses.
Après avoir pris soin de gérer le fuseau horaire lors de la création, vous devez également vous assurer de le conserver lorsque vous reconvertissez en représentation sous forme de chaîne. afin que vous puissiez utiliser en toute sécurité ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
Et évite totalement tout le reste, surtout ...
getYear()
, getMonth()
, getDate()
Soustrayez deux dates pour obtenir la différence en millisecondes, si vous obtenez 0
c'est la même date.
function areSameDate(d1, d2){
return d1 - d2 === 0
}
Pour comparer deux dates, nous pouvons utiliser la bibliothèque JavaScript date.js disponible à l'adresse suivante: https://code.google.com/archive/p/datejs/downloads
et utilisez la méthode Date.compare( Date date1, Date date2 )
et elle renvoie un nombre qui signifie le résultat suivant:
-1 = date1 est inférieure à date2.
0 = les valeurs sont égales.
1 = date1 est supérieure à date2.
Pour créer des dates à partir de texte libre en Javascript, vous devez l'analyser dans l'objet Date ().
Vous pouvez utiliser Date.parse (), qui prend du texte libre, tente de le convertir en une nouvelle date, mais si vous avez le contrôle de la page, je vous recommanderais d'utiliser des zones de sélection HTML ou un sélecteur de date tel que le contrôle de calendrier YUI). ou le jQuery UI Datepicker .
Une fois que vous avez une date, comme d'autres personnes l'ont fait remarquer, vous pouvez utiliser une arithmétique simple pour soustraire les dates et la reconvertir en nombre de jours en divisant le nombre (en secondes) par le nombre de secondes d'un jour (60 * 60 * 24 = 86400).
Supposons que vous obteniez les objets de date A et B, obtenez leur valeur de temps EPOCH, puis soustrayez pour obtenir la différence en millisecondes.
var diff = +A - +B;
C'est tout.
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;
}
Je stocke généralement Dates
comme timestamps(Number)
dans des bases de données.
Lorsque je dois comparer, je compare simplement entre ces horodatages ou
convertissez-le en objet Date, puis comparez-le avec > <
si nécessaire.
Notez que == ou === ne fonctionne pas correctement sauf si vos variables sont des références du même objet Date.
Convertissez ces objets Date en timestamp (nombre) d’abord, puis comparez leur égalité.
var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp
var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);
Une version améliorée du code posté par "some"
/* 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
);
};
usage:
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));
Si votre format de date est le suivant, vous pouvez utiliser ce code:
var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
//...
}
Il vérifiera si le numéro 20121121
est supérieur à 20121103
ou non.
Avant de comparer l'objet Dates
, essayez de régler leurs deux millisecondes sur zéro, comme Date.setMilliseconds(0);
.
Dans certains cas où l’objet Date
est créé dynamiquement en javascript, si vous continuez d’imprimer le Date.getTime()
, vous verrez les millisecondes se modifier, ce qui empêchera l’égalité des deux dates.
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;
}
Utilisez ce code pour comparer la date en utilisant javascript.
Merci D.Jeeva
Une autre façon de comparer deux dates consiste à utiliser la méthode toISOString()
. Ceci est particulièrement utile lorsque vous comparez à une date fixe conservée dans une chaîne, car vous pouvez éviter de créer un objet de courte durée. Grâce au format ISO 8601, vous pouvez comparer ces chaînes lexicographiquement (au moins lorsque vous utilisez le même fuseau horaire).
Je ne dis pas nécessairement que c'est mieux que d'utiliser des objets temporels ou des horodatages; offrant simplement ceci comme une autre option. Il peut y avoir des cas Edge où cela pourrait échouer, mais je ne les ai pas encore trouvés :)
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;
}
La manière simple est,
var first = '2012-11-21';
var second = '2012-11-03';
if (new Date(first) > new Date(second) {
.....
}
Voici ce que j'ai fait dans l'un de mes projets,
function CompareDate(tform){
var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));
if(tform.START_DATE.value!=""){
var estStartDate = tform.START_DATE.value;
//format for Oracle
tform.START_DATE.value = estStartDate + " 00:00:00";
}
if(tform.END_DATE.value!=""){
var estEndDate = tform.END_DATE.value;
//format for Oracle
tform.END_DATE.value = estEndDate + " 00:00:00";
}
if(endDate <= startDate){
alert("End date cannot be smaller than or equal to Start date, please review you selection.");
tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
return false;
}
}
appelant ceci sur le formulaire onsubmit. J'espère que cela t'aides.
Salut Voici mon code pour comparer les dates. Dans mon cas, je fais un contrôle pour ne pas permettre de sélectionner les dates passées.
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;
Supposons que vous traitez avec ce 2014[:-/.]06[:-/.]06
ou ce 06[:-/.]06[:-/.]2014
format de date, alors vous pouvez comparer les dates de cette façon
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
Comme vous pouvez le constater, nous séparons les séparateurs, puis comparons les entiers.
Vous pouvez comparer les dates de la manière la plus simple et la plus compréhensible.
<input type="date" id="getdate1" />
<input type="date" id="getdate2" />
supposons que vous ayez deux dates à comparer.
donc tout d'abord écrire une méthode commune pour analyser la date.
<script type="text/javascript">
function parseDate(input) {
var datecomp= input.split('.'); //if date format 21.09.2017
var tparts=timecomp.split(':');//if time also giving
return new Date(dparts[2], dparts[1]-1, dparts[0], tparts[0], tparts[1]);
// here new date( year, month, date,)
}
</script>
parseDate () est la méthode courante pour analyser la date. vous pouvez maintenant vérifier votre date =,>, <tout type de comparaison
<script type="text/javascript">
$(document).ready(function(){
//parseDate(pass in this method date);
Var Date1=parseDate($("#getdate1").val());
Var Date2=parseDate($("#getdate2").val());
//use any oe < or > or = as per ur requirment
if(Date1 = Date2){
return false; //or your code {}
}
});
</script>
Bien sûr, ce code vous aidera.