Comparer javascript dates
-
16-09-2019 - |
Question
Je compare les dates avec quelque chose comme ceci:
var dt = new Date();
dt.setDate("17");
dt.setMonth(06);
dt.setYear("2009");
var date = new Date();
console.log("dt(%s) == date(%s) == (%s)", dt, date, (dt == date) );
if( now == dt ) {
....
}
Les valeurs de chaîne sont dynamiques bien sûr.
Dans les journaux que je vois:
dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)
J'ai essayé equals (), mais il ne fonctionne pas (je tentais la partie Java de JavaScript: P)
Comment puis-je comparer ces dates afin qu'ils reviennent vrai?
La solution
Le code suivant devrait résoudre votre problème:
(myDate.getTime() == myOtherDate.getTime())
Le problème est que lorsque vous écrivez:
(myDate == myOtherDate)
... vous demandez en fait « Est-myDate
pointant vers le même objet que myOtherDate
pointe vers? », Et non « est identique à myDate
myOtherDate
? ».
La solution consiste à utiliser getTime
pour obtenir un numéro représentant l'objet Date (et depuis getTime
renvoie le nombre de millisecondes depuis le temps d'époque, ce nombre sera un exact représentation de l'objet Date) et puis utiliser ce numéro pour la comparaison (numéros comparant fonctionneront comme prévu).
Steve
Autres conseils
Le problème avec votre code est que vous comparez à temps partiel / jour au lieu de seulement la date.
Essayez ce code:
var myDate = new Date();
myDate.setDate(17);
myDate.setMonth(7);
myDate.setYear(2009);
//Delay code - start
var total = 0;
for(var i=0; i<10000;i++)
total += i;
//Delay code - end
var now = new Date();
console.log(now.getTime() == myDate.getTime());
Si vous gardez le pour le code de la boucle (identifiée par « code de retard -start »), la console affichera « faux » et si vous supprimez le pour le code de la boucle, la console se connectera « vrai », même si dans les deux cas myDate est 7/17/2009 et « maintenant » est 7/17/2009.
Le problème est que les magasins d'objets de date JavaScript fois la date et le temps . Si vous voulez seulement comparer la partie de date, vous devez écrire le code.
function areDatesEqual(date1, date2)
{
return date1.getFullYear() == date2.getFullYear()
&& date1.getMonth() == date2.getMonth()
&& date1.getDate() == date2.getDate();
}
Cette fonction imprime « true » si les deux « partie date » javascript est égal en ignorant la partie temporelle associée.
=> (myDate.getTime() == myOtherDate.getTime())
(myDate == myOtherDate)
ne fonctionne pas, il compare les deux objets (pointeurs) au lieu de la valeur qu'ils contiennent. Utilisez getTime pour obtenir la représentation entière de date et puis comparer.