Asignar una Datevariable a otra copiará la referencia a la misma instancia. Esto significa que cambiar uno cambiará al otro.
¿Cómo puedo clonar o copiar una Dateinstancia?
Asignar una Datevariable a otra copiará la referencia a la misma instancia. Esto significa que cambiar uno cambiará al otro.
¿Cómo puedo clonar o copiar una Dateinstancia?
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".