No sé si sólo a mí me pasa o si sólo yo ocupo las fechas en Javascript, pero siempre que intento compararlas, algunas salen mal debido al offset. Sé que no se debe confiar en las fechas del cliente, pues se pueden cambiar, pero en alguna ocasión debimos necesitar trabajar con estas y puede que nos haya dado resultados inesperados.
Así que hoy mostraré cómo “ajustar el tiempo” de las fechas de Javascript utilizando getTimezoneOffset.
Esto pasa cuando creamos un objeto fecha utilizando una fecha como cadena. En donde la cadena es algo como “2018-03-05” (que representa el 5 de marzo del 2018 ). El objeto se crearía de la siguiente manera:
let fecha = new Date("2018-03-05");
Nosotros esperamos que la fecha sea el 5 de marzo del 2018 a las 12 de la noche, o a las 00:00:00. Pero al imprimirlo...
Lo que está pasando aquí es que se están restando las horas del Tiempo universal coordinado (creo); en mi caso, como soy de México, resta 6 horas. ¿y si no estamos en México?
Javascript provee una forma de obtener el offset de la fecha. Y con ello podemos arreglar las fechas.
Vamos a ver la solución más abajo.
Esto es simple, al objeto que ya hemos creado vamos a ponerle el tiempo en milisegundos como el resultado de los milisegundos que ya tiene, sumando los milisegundos que resultan al obtener el offset. Para no confundirnos, se hace así:
let fecha = new Date("2018-03-05");
fecha.setTime(fecha.getTime() + fecha.getTimezoneOffset() * 60 * 1000);
setTime recibe un número, que es el tiempo en milisegundos que han pasado desde la fecha unix.
getTimezoneOffset devuelve en minutos la diferencia de tiempos; en este caso devolverá 360, pues son 6 horas multiplicadas por 60 minutos.
Estos 360 minutos los multiplicamos por 60 para pasarlos a segundos, y luego al resultado lo multiplicamos por 1000 para convertirlo a milisegundos.
Con eso, hacemos la resta. Obtenemos los milisegundos que ya tiene la fecha con getTime y a eso le sumamos el resultado que obtuvimos arriba.
En pocas palabras, se le suman los milisegundos de la diferencia de horas. Si después de hacer esto imprimo la fecha, tengo esto:
Correcto. La fecha ahora sí es del lunes a las 12 de la noche. Y este método, me parece, funciona para cualquier zona horaria.
Así, podemos arreglar y ajustar fechas en Javascript sin perder la cabeza.
Cabe mencionar que esto sólo me ha pasado al instanciar objetos con una fecha ya existente; si se instancia y no se le pasan parámetros, todo va bien. Es decir, si hago lo siguiente todo va bien:
let ahora = new Date();
Se desajusta cuando al constructor de Date le paso una cadena como argumento.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.
Ver comentarios
Exceente manera de explicar las cosas