Attribution d'un Date
vers une autre variable copiera la référence à la même instance. Cela signifie qu'en modifiant l'une, on modifie l'autre.
Comment puis-je réellement cloner ou copier un Date
instance ?
Attribution d'un Date
vers une autre variable copiera la référence à la même instance. Cela signifie qu'en modifiant l'une, on modifie l'autre.
Comment puis-je réellement cloner ou copier un Date
instance ?
Utiliser le Date de l'objet getTime()
qui renvoie le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 UTC ( Heure de l'époque ) :
var date = new Date();
var copiedDate = new Date(date.getTime());
Dans Safari 4, vous pouvez également écrire :
var date = new Date();
var copiedDate = new Date(date);
...mais je ne suis pas sûr que cela fonctionne dans d'autres navigateurs. (Cela semble fonctionner dans IE8).
Parfois, les gens utilisent aussi la sérialisation et la désérialisation JSON, mais celle-ci est meilleure et beaucoup plus rapide. +1 de ma part.
JSON pour cet extrait ? Il semblerait que ces personnes devraient clarifier leurs bases... Comme confondre jQuery avec JavaScript DOM.
Une autre façon d'écrire cette solution intéressante serait d'étendre le prototype Date : Date.prototype.clone = function() { return new Date(this.getTime()); };
que vous pouvez ensuite utiliser en tant que copiedDate = date.clone();
La méthode "valueOf()" pour les objets "Date" produit le même résultat que sa méthode "getTime()" (le nombre de millisecondes depuis l'heure d'origine).
@Steve : c'est vrai, mais getTime() pourrait "sembler" ne renvoyer que l'heure et ne pas inclure la date également, d'où ma référence à "plus propre". Franchement, le type Date en Javascript est un peu une zone de désastre, il n'aurait jamais dû être mutable en premier lieu.
Sauf qu'il faudra expliquer ce qu'est cette magie +
ne fait à personne d'autre qu'aux experts de la JS.
Tu ne dois pas toucher aux objets qui ne t'appartiennent pas. Vous devriez faire une nouvelle copie et l'appeler SuperDate ou quelque chose comme ça, dans les limites de votre champ d'action. De nombreux bogues difficiles à tester sont dus à des changements inattendus de la fonctionnalité des objets.
Cela fonctionnerait, mais pour des raisons de maintenabilité, cette approche serait considérée comme une odeur de code. J'ai écrit une approche que j'utilise habituellement dans mon codage : actuts.wordpress.com/2017/01/10/
Ne pas utiliser new Date(date)
, utiliser new Date(date.getTime()
ou new Date(date.valueOf)
car la première méthode peut entraîner des différences entre les dates au moins dans Firefox et IE (mais pas dans Chrome). Par exemple, en utilisant toISOString()
sur les deux dates dans Firefox génère "2015-04-21T04:56:42.000Z"
y "2015-04-21T04:56:42.337Z"
.
C'était peut-être le cas avec les anciennes versions de Firefox, mais pas avec la dernière version, new Date(date)
fonctionne bien. Essayez-le : let date = '2015-04-21T04:56:42.337Z'; new Date(date).toISOString()
. Le résultat est identique à l'entrée : "2015-04-21T04:56:42.337Z"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.