L'assegnazione di una Datevariabile a un'altra copierà il riferimento nella stessa istanza. Ciò significa che cambiando l'uno cambierà l'altro.
Come posso effettivamente clonare o copiare Dateun'istanza?
L'assegnazione di una Datevariabile a un'altra copierà il riferimento nella stessa istanza. Ciò significa che cambiando l'uno cambierà l'altro.
Come posso effettivamente clonare o copiare Dateun'istanza?
Risposte:
Utilizzare il metodo dell'oggetto DategetTime() , che restituisce il numero di millisecondi dal 1 ° gennaio 1970 alle 00:00:00 ( ora di epoca ):
var date = new Date();
var copiedDate = new Date(date.getTime());
In Safari 4 puoi anche scrivere:
var date = new Date();
var copiedDate = new Date(date);
... ma non sono sicuro che funzioni in altri browser. (Sembra funzionare in IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); }; che potresti usare comecopiedDate = date.clone();
copiedDate = new Date(date)approccio funziona in IE6 +. In Firefox le due opzioni hanno la stessa velocità.
new Date(date)lo stesso new Date(date.getTime()), perché JS proverà a chiamare date.valueOf()quando ha bisogno di un numero, ed date.valueOf()è uguale a date.getTime(), riferimento Date.valueOf Object.valueOf
new Date(date), utilizzare new Date(date.getTime()o new Date(date.valueOf)invece poiché il primo modo può portare a differenze tra le date almeno in Firefox e IE (non Chrome). Ad esempio l'utilizzo di toISOString()entrambe le date in Firefox genera "2015-04-21T04:56:42.000Z"e "2015-04-21T04:56:42.337Z".
Questo è l'approccio più pulito
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);
+sta facendo quella magia a chiunque tranne agli esperti di JS.
+segno è un operatore unaray qui. Significa new Date( Number(orig)) . Altro qui: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Versione semplificata:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
Ho scoperto che questo semplice compito funziona anche:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Ma non so quanto sia "sicuro". Testato con successo in IE7 e Chrome 19.
new Date(date), utilizzare new Date(date.getTime()o new Date(date.valueOf)invece poiché il primo modo può portare a differenze tra le date almeno in Firefox e IE (non Chrome). Ad esempio l'utilizzo di toISOString()entrambe le date in Firefox genera "2015-04-21T04:56:42.000Z"e "2015-04-21T04:56:42.337Z".