如何在 JavaScript 中将 CFAbsoluteTime 转换为日期对象,反之亦然?
CFAbsolute 时间是 Apple 设备和 Swift 等编程语言上的标准时间格式。它存储自 2001 年 1 月 1 日以来的纳秒量。在其核心,它类似于纪元时间,不同之处在于它存储的时间更接近现代,使用 2001 年而不是 1970 年作为参考点。这是 Apple 的 CFAbsolute 官方文档时间。
要将 CFAbsoluteTime 转换为 Date 对象,反之亦然,我们将主要使用 JavaScript Date.getTime() 方法,它提供自 1970 年 1 月 1 日以来的毫秒数。我们还将使用 Date.setTime() 方法,设置自 1970 年 1 月 1 日以来的毫秒数。
从 CFAbsoluteTime 转换为日期对象
要将 CFAbsolute 时间转换为普通日期,我们可以创建一个从 2001 年 1 月 1 日开始的 Date 对象,并将 CFAbsolute 时间值(以毫秒为单位)添加到 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));
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")));
输出:
2021-04-07T13:25:00.000Z
从日期对象转换为 CFAbsoluteTime
为了转换回 CFAbsolute 时间,我们可以简单地减去日期和 2001 年 1 月 1 日的 Date.getTime() 值,然后将该值从毫秒转换为纳秒。
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")));
以毫秒或纳秒为单位使用 CFAbsoluteTime
某些版本的 CFAbsoluteTime 以毫秒或纳秒而不是秒为单位存储。要使用这些类型,只需更改 unitConversionValue 参数的值,如下所示:Storage Type unitConversionValue Seconds 1000 Milliseconds 1 Nanoseconds 0.000001
默认情况下,程序将使用秒,这是最常见的 CFAbsoluteTime 存储类型。