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?
javascript
Árvíztűrő tükörfúrógép
fuente
fuente
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 quenew Date(date.getTime())
, porque JS intentará llamardate.valueOf()
cuando necesite un número, ydate.valueOf()
es lo mismo quedate.getTime()
, referencia Date.valueOf Object.valueOfnew Date(date)
, usenew Date(date.getTime()
o en sunew 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 usotoISOString()
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
fuente
fuente
+
está haciendo a todos menos a los expertos de JS.+
signo es unray operador aquí. Significanew Date( Number(orig))
. Más aquí: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Versión simplificada:
fuente
const cloneDate = d => new Date(d.getTime())
.Descubrí que esta simple asignación también funciona:
Pero no sé lo "seguro" que es. Probado con éxito en IE7 y Chrome 19.
fuente
new Date(date)
, usenew Date(date.getTime()
o en sunew 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 usotoISOString()
en ambas fechas en Firefox genera"2015-04-21T04:56:42.000Z"
y"2015-04-21T04:56:42.337Z"
.