Как получить текущую дату в работнике Cloudflare - PullRequest
1 голос
/ 21 октября 2019

Обычный объект Date для работников Cloudflare, все возвращаются 1 января 1970 года ...

Как правильно получить текущую дату и время в коде рабочих?

Спасибо,

G

1 Ответ

4 голосов
/ 21 октября 2019

Объект Date возвращает 1970-01-01 только при выполнении в глобальной области видимости. Если вы используете его во время обработки события для запроса, он будет правильно возвращать текущую дату.

let globalDate = Date.now();  // always zero

addEventListener("fetch", event => {
  let localDate = Date.now();  // will return actual current date
})

Фон

Причина в том, что Cloudflare Workersзапускает глобальную область в неуказанное время. Это может быть по требованию, когда приходит запрос, но это может быть раньше. Теоретически, рабочие могут даже выполнить глобальную область только один раз, а затем сделать снимок состояния и начать с моментального снимка при выполнении на границе. Чтобы гарантировать, что такие разные варианты реализации не влияют на поведение развернутых рабочих, среда выполнения рабочих должна гарантировать, что выполнение глобальной области является полностью детерминированным. Среди прочего, это означает, что Date.now() всегда должен возвращать одно и то же значение - ноль - при выполнении в глобальной области видимости.

...