14.4.08

Copiar fechas con Javascript

Un error común al trabajar con fechas en Javascript es copiar un objeto Date creado en una variable a otra.


var aa = new Date(2007,0,31) //31/01/2007
var bb = aa
bb.setFullYear(2009)  //esto modifica aa
document.write(aa) // Sat Jan 31 2009 00:00:00

Si, como se ve en el ejemplo, se instancia el objeto Date en la variable aa al copiar ésta a la variable bb, no se estará creando una nueva instanacia del objeto Date, sino que se estará creando una referencia al objeto instanciado en aa.

Para evitar esto y hacer lo que realmente se quería hacer, tener una nueva instancia del objeto Date en la variable bb con la fecha almacenada en la variable aa, se debe efectivamente utilizar el objeto Date.


var bb = new Date(aa.getFullYear(), aa.getMonth(), aa.getDate())

Pero también, de manera más sencilla, podemos utilizar el método del objeto Date getTime, que nos devuelve la cantidad de milisegundos que hubieron desde el 01/01/1970 hasta la fecha almacenada en la variable aa.

var bb = new Date(aa.getTime())

De esta manera, mantenemos también la información de hora, minutos y segundos que hubiera almacenado en la instancia del objeto en aa.

Adicionalmente, les dejo aquí el código necesario para extender el objeto Date para crear el método copy, que lleve adelante la tarea explicada.

Date.prototype.copy = function () {return new Date(this.getTime())}
//ejemplo
var a1 = new Date()
var a2 = a1.copy()

0 Comentarios: