Cloudflare 的工作人员上通常的 Date 对象,都返回 1 jan,1970...
在工人代码中获取当前日期时间的正确方法是什么?
谢谢,
G
该Date
对象仅在全局范围内执行时返回 1970-01-01。如果您在请求的事件处理程序期间使用它,它将正确返回当前日期。
let globalDate = Date.now(); // always zero
addEventListener("fetch", event => {
let localDate = Date.now(); // will return actual current date
})
背景
原因是 Cloudflare Workers 在未指定的时间运行全局范围。当请求到达时它可能是按需的,但它可能更早。理论上,Worker 甚至可以只执行一次全局作用域,然后对状态进行快照,并在边缘执行时从快照开始。为了确保这种不同的实现选项不会影响已部署工作人员的行为,工作人员运行时必须确保全局范围的执行是完全确定的。除此之外,这意味着Date.now()
在全局范围内执行时必须始终返回相同的值——零。