我有一个在欧洲/柏林时区运行的预定云功能。长话短说,我需要知道一年中的天数。
我用了下面的代码:
https://stackoverflow.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
})
我有一个在欧洲/柏林时区运行的预定云功能。
使用pubsub.schedule().timeZone()
更改Cloud Function的时区将不起作用。它仅为调度器设置时区。这意味着它不会改变函数执行过程中的时区。这就是为什么你仍然得到云功能的默认时间。
因此,您还需要为Cloud Function配置时区,并且有很多方法可以做到这一点。例如,你可以使用momentjs的时区插件:
momentjs:
var moment = require("moment-timezone");
var now = moment().tz("Europe/Berlin").format();
console.log(now); // print 2021-08-11T07:20:54+02:00