L'affectation d'une Datevariable à 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 Dateinstance?
L'affectation d'une Datevariable à 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 Dateinstance?
Réponses:
Utilisez la méthode de l'objet DategetTime() , qui renvoie le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 ( 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 sais pas si cela fonctionne dans d'autres navigateurs. (Il semble fonctionner dans IE8).
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'appeler date.valueOf()lorsqu'il a besoin d'un numéro, et date.valueOf()est identique à date.getTime(), référence Date.valueOf Object.valueOf
new Date(date), utilisez new Date(date.getTime()ou à la new 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'utilisation toISOString()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
let dat = new Date()
let copyOf = new Date(dat.valueOf())
console.log(dat);
console.log(copyOf);
var orig = new Date();
var copy = new Date(+orig);
+fait à quiconque sauf aux experts JS.
+signe est opérateur unaray ici. Ça veut dire new Date( Number(orig)) . Plus ici: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Version simplifiée:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
J'ai découvert que cette simple mission fonctionne également:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Mais je ne sais pas à quel point c'est "sûr". Testé avec succès dans IE7 et Chrome 19.
new Date(date), utilisez new Date(date.getTime()ou à la new 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'utilisation toISOString()des deux dates dans Firefox génère "2015-04-21T04:56:42.000Z"et "2015-04-21T04:56:42.337Z".