Atribuir uma Date
variá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 Date
instância?
javascript
Controlaríztűrő tükörfúrógép
fonte
fonte
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 anew Date(date.getTime())
, porque o JS tentará ligardate.valueOf()
quando precisar de um número edate.valueOf()
é o mesmo quedate.getTime()
, referência Date.valueOf Object.valueOfnew Date(date)
, usenew 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 usotoISOString()
nas duas datas no Firefox gera"2015-04-21T04:56:42.000Z"
e"2015-04-21T04:56:42.337Z"
.Esta é a abordagem mais limpa
fonte
fonte
+
está fazendo com ninguém além de especialistas em JS.+
sinal é operador unaray aqui. Isso significanew Date( Number(orig))
. Mais aqui: developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…Versão simplificada:
fonte
const cloneDate = d => new Date(d.getTime())
.Descobri que esse simples trabalho também funciona:
Mas não sei o quão "seguro" é. Testado com sucesso no IE7 e Chrome 19.
fonte
new Date(date)
, usenew 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 usotoISOString()
nas duas datas no Firefox gera"2015-04-21T04:56:42.000Z"
e"2015-04-21T04:56:42.337Z"
.