8

Cloudflare 的工作人员上通常的 Date 对象,都返回 1 jan,1970...

在工人代码中获取当前日期时间的正确方法是什么?

谢谢,

G

4

1 回答 1

21

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()在全局范围内执行时必须始终返回相同的值——零。

于 2019-10-21T17:27:15.333 回答