JavaScript 如何将CFAbsoluteTime转换为日期对象
CFAbsoluteTime是苹果设备和Swift等编程语言上的标准时间格式。它存储自2001年1月1日以来的纳秒数。在本质上,它类似于时期时间,只是它将时间存储得更接近于现代日,以2001年作为参考点,而不是1970年。这是苹果关于CFAbsoluteTime的官方文档。
要将CFAbsoluteTime转换为日期对象,反之亦然,我们主要使用JavaScript的Date.getTime()方法,它提供自1970年1月1日以来的毫秒数。我们还将使用Date.setTime()方法,它设置自1970年1月1日以来的毫秒数。
从CFAbsoluteTime转换为日期对象
要从CFAbsoluteTime转换为普通日期,我们可以从2001年1月1日创建一个日期对象,然后将CFAbsoluteTime值(以毫秒为单位)添加到Date.getTime()值。
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));
输出:
2021-04-07T13:25:00.000Z
从Date对象转换为CFAbsoluteTime
要将其转换回CFAbsolute时间,我们可以简单地将日期和2001年1月1日的Date.getTime()值相减,然后将该值从毫秒转换为纳秒。
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存储类型。