首页 > 解决方案 > 如何在 Node.js 中获得准确的 UTC 纳秒时间戳

问题描述

python3有可能运行以下构造:

from datetime import datetime
print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))})

这将输出类似 JSON 的结构:

{'timestamp': '1567658264143923968'}

现在我想在 Node.JS 12 中得到类似的结果。

因此 32 位 int 不能成为限制。(这在 2019 年第三季度不会是问题,因为 Node 10 支持 bigint)。

操作系统也不能造成这样的限制,因为 WinAPIGetSystemTimePreciseAsFileTime和 *nixclock_gettime(CLOCK_MONOTONIC)都优于 1us

如何在 NodeJS 中获得纳秒 UTC 时间戳字符串?


还有什么其他选择?


UPD

现在,我可以稍微改一下问题。从非常简单的角度来看,Nodejs 可以看作是一个独立于操作系统的运行时库。你编写一个 js 代码,它在所有平台上的工作原理都是一样的。所以它必须将大多数可行的功能绑定到 js 接口;定时器功能就是其中之一。正如我们所见,单调时钟QueryPerformanceCounter()调用是通过 process.hrtime() 绑定的

node.js 中的哪个函数会导致clock_gettime(3)在 linux 上调用,或GetSystemTimePreciseAsFileTime()在 windows 上调用,并将结果返回给 js,精度为微秒或更好?

标签: node.jsdatetimetimestampunix-timestamp

解决方案


如果您正在寻找的分辨率是微秒,那么process.hrtime()应该就足够了。

const hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)

或者,您可以使用timestamp-nano

如果您需要更高的精度,您可以自己构建一个本机节点模块:https ://medium.com/the-node-js-collection/n-api-next-generation-node-js-apis-for-native-模块-169af5235b06

或者,如果您真的喜欢 Python,您可以从 Node 执行 Python 脚本:如何从 Node.js 调用 Python 函数


推荐阅读