Часовой пояс запланированной облачной функции не показывает правильный номер дня

avatar
harunB10
8 августа 2021 в 22:52
108
1
0

У меня есть запланированная облачная функция, которая выполняется в часовом поясе Европы/Берлина. Короче говоря, мне нужно получить номер дня в году.

Для этого я использовал этот код:

https://coderhelper.com/a/8619946/4195212

В то время, когда я пишу это, если я запущу код во фрагменте ответа, опубликованном выше, он покажет мне 221 (что правильно). Но в моей облачной функции это 220.

Я подумал, что мне нужно правильно установить часовой пояс, что я и сделал. Но все равно показывает неправильный номер дня.

Что здесь не так?

exports.scheduledFunction2 = functions.region('europe-west3').pubsub.schedule('every minute').timeZone("Europe/Berlin").onRun((context) => {
    var now = new Date();
    var start = new Date(now.getFullYear(), 0, 0);
    var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
    var oneDay = 1000 * 60 * 60 * 24;
    var day = Math.floor(diff / oneDay);
    console.log('Day of year: ' + day); // prints 220

})
Источник
Kundan
9 августа 2021 в 03:18
0

Часовой пояс по умолчанию в планировщике установлен на (Америка/Лос-Анджелес).

harunB10
9 августа 2021 в 08:28
0

Да, но я изменил его на timeZone("Europe/Berlin")

Kundan
9 августа 2021 в 10:50
0

medium.com/geekculture/…

Ответы (1)

avatar
JM Gelilio
11 августа 2021 в 05:21
0

У меня есть запланированная облачная функция, которая работает в часовом поясе Европы/Берлина.

Использование pubsub.schedule().timeZone() для изменения часового пояса Cloud Function не работает. Он устанавливает только часовой пояс для планировщика. Это означает, что он не меняет часовой пояс внутри выполнения функции. Вот почему вы все еще получаете время по умолчанию для Cloud Function.

Поэтому вам также необходимо настроить часовой пояс для облачной функции, и есть много способов сделать это. Например, вы можете использовать плагин часового пояса Momentjs:

моменты:

var moment = require("moment-timezone");
var now = moment().tz("Europe/Berlin").format();
console.log(now); // print 2021-08-11T07:20:54+02:00