¿Cómo convertir CFAbsoluteTime en un objeto de fecha y viceversa en JavaScript?

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.

Publicación traducida automáticamente

Artículo escrito por xtrp y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *