L'affectation d'une Date
variable à une autre copiera la référence dans la même instance. Cela signifie que changer l'un changera l'autre.
Comment puis-je réellement cloner ou copier une Date
instance?
javascript
Árvíztűrő tükörfúrógép
la source
la source
Date.prototype.clone = function() { return new Date(this.getTime()); };
vous pourriez ensuite utiliser en tant quecopiedDate = date.clone();
copiedDate = new Date(date)
approche fonctionne dans IE6 +. Dans Firefox, les deux options ont la même vitesse.new Date(date)
Identique ànew Date(date.getTime())
, car JS tentera d'appelerdate.valueOf()
lorsqu'il a besoin d'un numéro, etdate.valueOf()
est identique àdate.getTime()
, référence Date.valueOf Object.valueOfnew Date(date)
, utiliseznew Date(date.getTime()
ou à lanew Date(date.valueOf)
place, car la première façon peut entraîner des différences entre les dates dans au moins Firefox et IE (pas Chrome). Par exemple, l'utilisationtoISOString()
des deux dates dans Firefox génère"2015-04-21T04:56:42.000Z"
et"2015-04-21T04:56:42.337Z"
.C'est l'approche la plus propre
la source
la source
+
fait à quiconque sauf aux experts JS.+
signe est opérateur unaray ici. Ça veut direnew Date( Number(orig))
. Plus ici: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Version simplifiée:
la source
const cloneDate = d => new Date(d.getTime())
.J'ai découvert que cette simple mission fonctionne également:
Mais je ne sais pas à quel point c'est "sûr". Testé avec succès dans IE7 et Chrome 19.
la source
new Date(date)
, utiliseznew Date(date.getTime()
ou à lanew Date(date.valueOf)
place, car la première façon peut entraîner des différences entre les dates dans au moins Firefox et IE (pas Chrome). Par exemple, l'utilisationtoISOString()
des deux dates dans Firefox génère"2015-04-21T04:56:42.000Z"
et"2015-04-21T04:56:42.337Z"
.