在计算机科学中,Unix 时间戳是指自协调世界时1970年1月1日0时0分0秒(即1970年1月1日午夜,格林威治标准时间(GMT)的开始时间)起至现在的总秒数。在2018年之前,Unix 时间戳的表示最高只达到了2038年01月19日 03:14:07,因为此时采用的时间戳是32位的,超过此时间后时间戳将回滚到1901年12月13日00:45:52。但是,@year/2038这个npm包可以正确处理到2099年的2038问题(即使用64位的时间戳),帮助前端开发者解决了这个问题。
安装
使用之前,需要先进行安装。在项目目录下终端输入以下命令:
npm i @year/2038
使用
安装成功后,在项目中引入 @year/2038:
import {Year2038} from '@year/2038' const timestamp = Year2038.getTimestamp(new Date('2099-12-31 23:59:59')) console.log(timestamp) // 输出 uint64 类型的时间戳
在代码中使用 Year2038.getTimestamp() 方法可以得到正确的时间戳,该时间戳为 uint64 类型,可以与现有的 32 位时间戳做兼容处理。
同时,@year/2038支持多种时间转换方式:
- 时间戳转Date对象:Year2038.getDateTime(timestamp)
- 时间戳转毫秒数:Year2038.getTimestampInMs(timestamp)
- Date对象转时间戳:Year2038.getTimestamp(dateObj)
除此之外,还可以获取当前时间的时间戳:
const nowTimestamp = Year2038.getNowTimestamp()
示例
下面是一个示例代码,用于演示如何使用 @year/2038 来解决某个应用在2038年后无法正常工作的问题:
-- -------------------- ---- ------- ------ ---------- ---- ------------- ----- ----------- - --- --------------------- ----- ---------- - ----- -- ----------- - ------------ - ----- --------------- - ------------------------- ----------------------------- -- -- --------- ---- --- --------- - ---- - ------------------- ---- ---- -- ------- ---- ------- -------- -
以上代码中,我们首先获取了当前年份和目标年份,然后通过 @year/2038 获取目标年份的时间戳,只有当目标年份大于当前年份时才会进行计算。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055cd681e8991b448da72b