如何将Timestamp的秒、纳秒参数在前端转换为Date类型
前端秒数+纳秒转Date对象实现方案
首先明确JavaScript内置Date对象的构造逻辑:仅支持毫秒级时间戳作为数值入参,所以需要先把秒、纳秒统一转换成毫秒单位再构造实例。
具体实现步骤
- 第一步:将秒数转换为毫秒:
seconds * 1000 - 第二步:将纳秒数转换为毫秒:
Math.floor(nanoseconds / 1000000),由于Date不支持小数精度的毫秒值,这里直接取整即可 - 第三步:将两部分毫秒值相加,传入
Date构造函数就能得到目标时间对象
示例代码
针对你给出的参数:
_nanoseconds: 0 _seconds: 1586833200
对应转换代码如下:
function timestampToDate(seconds, nanoseconds) { // 计算总毫秒数 const totalMilliseconds = seconds * 1000 + Math.floor(nanoseconds / 1000000); return new Date(totalMilliseconds); } // 代入参数测试 const targetDate = timestampToDate(1586833200, 0); console.log(targetDate); // 输出:2020-04-14T07:00:00.000Z
注意事项
- 原生
Date对象最高仅支持毫秒精度,纳秒级精度无法完全保留,如果业务需要保留纳秒信息,可以单独存储纳秒字段做额外处理 - 注意确认入参的
seconds是秒级Unix时间戳,不要和毫秒级时间戳混淆,否则会得到完全不符合预期的时间结果
内容的提问来源于stack exchange,提问作者franfonse
相关产品推荐
相关产品推荐

