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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top