Egalité entre deux dates.

Eléphant du PHP | 134 Messages

08 janv. 2008, 17:19

Bonjour,

J'ai un petit problème avec le traitement des dates en JS.

J'ai fais un script qui teste des dates saisies par rapport a celle du serveur.

Code : Tout sélectionner

var val = document.getElementById('date_demandee').value; var dateDemandee = getDate(val); var dateServeur = new Date(); var dateTemp = dateServeur; dateTemp.setDate(dateDemandee.getDate()); ...
quand la dernière ligne de code est executée pour changer la date de "dateTemp" et bien la date de "dateServeur" est également changée.

Je voudrais savoir s'il y a un moyen de contourner ça ou bien y a-t-il une autre méthode ?

Merci d'avance,
Devether

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 janv. 2008, 17:27

Tiens, c'est vrai que je ne m'était pas posé la question avec les objets javascript, mais apparement ce qui t'arrive c'est que tu manipules des références qui pointent toutes deux vers le même objet. (Effet que l'on retrouve en php et qui a changé entre php4 et php5).

En gros :
var dateServeur = new Date(); // déclare une variable qui pointe vers une instance de l'objet Date
var dateTemp = dateServeur; // déclare une variable qui pointe vers le même objet Date
Du coup, quelque soit la variable utilisée c'est toujours la même instance qui est modifiée et la modification apparait donc pour les deux variables. Afin d'éviter cela, il te faut faire appel à une nouvelle instance de Date :
var dateServeur = new Date(); 
var dateTemp = new Date();
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 134 Messages

09 janv. 2008, 18:03

Afin d'éviter cela, il te faut faire appel à une nouvelle instance de Date :
var dateServeur = new Date(); 
var dateTemp = new Date();
Dans ce cas, javascript execute-t-il assez rapidement les deux commandes pour que "dateServeur" soit bien strictement égale à "dateTemp" ?

ViPHP
ViPHP | 4039 Messages

09 janv. 2008, 20:04

si c'est exprimé en secondes, y'a pas de soucis à avoir :lol:

JS n'est plus l'usine à gaz des années 90..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 janv. 2008, 11:31

Mouais... il est malgré tout possible que les deux valeurs soient effectivement différente. Il n'y a pas à ma connaissance de fonction clone() en javascript, permettant de dupliquer une instance. En revanche, après une rapide recherche sur google, tu peux en trouver quelques unes qui ont été implémentés...

Notament trouvé celle-ci qui m'a l'air pas mal :
function clone(obj){
    if(obj == null || typeof(obj) != 'object')
        return obj;

    var temp = new obj.constructor(); 
    for(var key in obj)
        temp[key] = clone(obj[key]);

    return temp;
}
Tu aurais alors (à tester) :
var dateServeur = new Date();  
var dateTemp = clone(dateServeur);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...