Asignar una Date
variable a otra copiará la referencia a la misma instancia. Esto significa que cambiar uno cambiará al otro.
¿Cómo puedo clonar o copiar una Date
instancia?
Asignar una Date
variable a otra copiará la referencia a la misma instancia. Esto significa que cambiar uno cambiará al otro.
¿Cómo puedo clonar o copiar una Date
instancia?
Respuestas:
Use el método del objeto DategetTime()
, que devuelve el número de milisegundos desde el 1 de enero de 1970 00:00:00 ( hora de la época ):
var date = new Date();
var copiedDate = new Date(date.getTime());
En Safari 4, también puedes escribir:
var date = new Date();
var copiedDate = new Date(date);
... pero no estoy seguro de si esto funciona en otros navegadores. (Parece funcionar en IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); };
que luego podría usar comocopiedDate = date.clone();
copiedDate = new Date(date)
enfoque funciona en IE6 +. En Firefox, las dos opciones tienen la misma velocidad.
new Date(date)
igual que new Date(date.getTime())
, porque JS intentará llamar date.valueOf()
cuando necesite un número, y date.valueOf()
es lo mismo que date.getTime()
, referencia Date.valueOf Object.valueOf
new Date(date)
, use new Date(date.getTime()
o en su new Date(date.valueOf)
lugar, ya que la primera forma puede generar diferencias entre las fechas en al menos Firefox e IE (no en Chrome). Por ejemplo, el uso toISOString()
en ambas fechas en Firefox genera "2015-04-21T04:56:42.000Z"
y "2015-04-21T04:56:42.337Z"
.
Este es el enfoque más limpio
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á haciendo a todos menos a los expertos de JS.
+
signo es unray operador aquí. Significa new Date( Number(orig))
. Más aquí: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Versión simplificada:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())
.
Descubrí que esta simple asignación también funciona:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Pero no sé lo "seguro" que es. Probado con éxito en IE7 y Chrome 19.
new Date(date)
, use new Date(date.getTime()
o en su new Date(date.valueOf)
lugar, ya que la primera forma puede generar diferencias entre las fechas en al menos Firefox e IE (no en Chrome). Por ejemplo, el uso toISOString()
en ambas fechas en Firefox genera "2015-04-21T04:56:42.000Z"
y "2015-04-21T04:56:42.337Z"
.