Atribuir uma Datevariável a outra copiará a referência para a mesma instância. Isso significa que mudar um mudará o outro.
Como posso realmente clonar ou copiar uma Dateinstância?
Atribuir uma Datevariável a outra copiará a referência para a mesma instância. Isso significa que mudar um mudará o outro.
Como posso realmente clonar ou copiar uma Dateinstância?
Respostas:
Use o método do objeto DategetTime() , que retorna o número de milissegundos desde 1 de janeiro de 1970 00:00:00 ( horário da época ):
var date = new Date();
var copiedDate = new Date(date.getTime());
No Safari 4, você também pode escrever:
var date = new Date();
var copiedDate = new Date(date);
... mas não tenho certeza se isso funciona em outros navegadores. (Parece funcionar no IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); }; O que você poderia então usar comocopiedDate = date.clone();
copiedDate = new Date(date)abordagem funciona no IE6 +. No Firefox, as duas opções são da mesma velocidade.
new Date(date)igual a new Date(date.getTime()), porque o JS tentará ligar date.valueOf()quando precisar de um número e date.valueOf()é o mesmo que date.getTime(), referência Date.valueOf Object.valueOf
new Date(date), use new Date(date.getTime()ou, new Date(date.valueOf)em vez disso, pois a primeira maneira pode levar a diferenças entre as datas no mínimo no Firefox e no IE (não no Chrome). Por exemplo, o uso toISOString()nas duas datas no Firefox gera "2015-04-21T04:56:42.000Z"e "2015-04-21T04:56:42.337Z".
Esta é a abordagem mais limpa
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);
+está fazendo com ninguém além de especialistas em JS.
+sinal é operador unaray aqui. Isso significa new Date( Number(orig)) . Mais aqui: developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Versão simplificada:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
Descobri que esse simples trabalho também funciona:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Mas não sei o quão "seguro" é. Testado com sucesso no IE7 e Chrome 19.
new Date(date), use new Date(date.getTime()ou, new Date(date.valueOf)em vez disso, pois a primeira maneira pode levar a diferenças entre as datas no mínimo no Firefox e no IE (não no Chrome). Por exemplo, o uso toISOString()nas duas datas no Firefox gera "2015-04-21T04:56:42.000Z"e "2015-04-21T04:56:42.337Z".