jueves, 17 de febrero de 2022

Restar fechas en código Google Script

 En otros artículos, he mostrado la preocupación de no conseguir entender como funcionan las fechas en el código. 

He descubierto que hay dos formas diferentes de gestionarlas. Una es dentro del código y otra en las fórmulas de las hojas de cálculo

Empezamos por el código:

En la siguiente función he probado a restar un número ( un 1 ) a una fecha. Y este es el resultado:



function restar_tiempo(){

// Vamos a intentar ver que pasa si sumamos o restamos una cantidad a una fecha

var herramienta =SpreadsheetApp.getActiveSpreadsheet()

var pestana = herramienta.getSheetByName('agenda')

var fecha = pestana.getRange('f1').getValue()

Logger.log('Fecha: '+fecha) // Resultado: Wed Feb 16 2022 00:00:00 GMT+0100 (CET)


// Empezamos restando 1

var fecha_menos_uno = fecha-1

Logger.log('Fecha: '+fecha_menos_uno) // Lo cambia a número y si hace la resta Resultado: 1644965999999

// Pero en formato fecha como queda?

fecha_menos_uno = new Date(fecha_menos_uno)

Logger.log('Fecha: '+fecha_menos_uno) // Ha restado, parece un milisegundo Resultado: Tue Feb 15 2022 23:59:59 GMT+0100 (CET)


// Vamos a ver la diferencia entre la fecha primera y la resta, pero en número

var numero_fecha = fecha.getTime()

var numero_fecha_menos_uno = fecha_menos_uno.getTime()

Logger.log('Numero_fecha '+numero_fecha) // Resultado: 1644966000000

Logger.log('Numero_fecha_menos_uno '+numero_fecha_menos_uno) // Resultado: 1644965999999


/*******************     CONCLUSIÓN  *********************************

 Cuando restamos a una fecha, estamos restando milisegundos

 Por lo que si queremos restar un día entero deberemos restarle 1000*60*60*24 =8640000 milisegundos

 Es decir 1000 milisegundos por 60 segundos por 60 minutos por 24 horas que tiene cada día

*/


/* Hemos utilizado dos métodos para trabajar con las fechas en el código

     new Date (milisegundos) para conseguir la fecha desde un número

     getTime(fecha) para conseguir lo contrario, es decir, los milisegundos de una fecha

*/

}


Sin embargo en las fórmulas:

Si pones la fórmula =today() te aparece una fecha, en este caso 17/02/2022

Si le restas uno, es decir, =today()-1 te aparece la fecha del día anterior 16/02/2022


CUAL ES EL MISTERIO? PORQUÉ ESA DIFERENCIA?


Parece que en el código los días tienen de base un número con la cantidad de milisegundos que

han pasado desde el 1 de Enero de 1970 a la 1 de la noche hasta la fecha en cuestión


Sin embargo, en las fórmulas los días tienen de base también un número, pero con la cantidad de

días (no de milisegundos) que han pasado desde (no desde 1970) el 1 de Enero de 1900. 

En este último caso, las horas, minutos, segundos y milisegundos se expresan dentro de la parte

decimal del número


No hay comentarios:

Publicar un comentario

Crear PDF horizontal

El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...