CFAbsolute time es un formato de hora estándar en dispositivos Apple y lenguajes de programación como Swift. Almacena la cantidad de nanosegundos desde el 1 de enero de 2001. En esencia, es similar al tiempo de época, excepto que almacena tiempos más cercanos a la actualidad, usando 2001 como punto de referencia en lugar de 1970. Aquí está la documentación oficial de Apple para CFAbsolute tiempo.
Para convertir CFAbsoluteTime a objeto Date y viceversa, usaremos principalmente el método JavaScript Date.getTime(), que proporciona la cantidad de milisegundos desde el 1 de enero de 1970. También usaremos el método Date.setTime(), que establece la cantidad de milisegundos desde el 1 de enero de 1970.
Conversión de CFAbsoluteTime a un objeto de fecha
Para convertir CFAbsolute Time a una fecha normal, podemos crear un objeto Date a partir del 1 de enero de 2001 y simplemente agregar el valor de tiempo CFAbsolute (en milisegundos) al valor Date.getTime().
Javascript
const CFAbsoluteTimeToDate = (CFATime, unitConversionValue = 1000) => { const dt = new Date('January 1 2001 GMT'); dt.setTime(dt.getTime() + CFATime * unitConversionValue); return dt; }; console.log(CFAbsoluteTimeToDate(639494700));
Producción:
2021-04-07T13:25:00.000Z
Conversión de un objeto de fecha a CFAbsoluteTime
Para volver a convertir a tiempo CFAbsolute, podemos simplemente restar los valores Date.getTime() de la fecha y el 1 de enero de 2001, y luego convertir ese valor de milisegundos a nanosegundos.
Javascript
const DateToCFAbsoluteTime = (dt, unitConversionValue = 1000) => { const CFADate = new Date('January 1 2001 GMT'); // unitConversionValue; return (dt.getTime() - CFADate.getTime()); }; console.log(DateToCFAbsoluteTime( new Date("April 5 2021")));
Trabajar con CFAbsoluteTime en milisegundos o nanosegundos
Algunas versiones de CFAbsoluteTime se almacenan en milisegundos o nanosegundos en lugar de segundos. Para trabajar con estos tipos, simplemente cambie el valor del argumento unitConversionValue de la siguiente manera:
Tipo de almacenamiento | valor de conversión de unidad |
Segundos | 1000 |
milisegundos | 1 |
nanosegundos | 0.000001 |
De forma predeterminada, el programa utilizará segundos, que es el tipo de almacenamiento CFAbsoluteTime más común.