我在 Cloud Functions for Firebase 上使用的 Node 服务器上使用纯 JavaScript。 json 名称是:Trial.json
[{
"date": "0822",
"message": "Have a nice day on 0822"
},
{
"date": "0823",
"message": "Have a nice day on 0823"
},
{
"date": "0824",
"message": "Have a nice day on 0824"
},
{
"date": "0825",
"message": "Have a nice day on 0825"
},
{
"date": "0826",
"message": "Have a nice day on 0826"
},
{
"date": "0827",
"message": "Have a nice day on 0827"
},
{
"date": "0828",
"message": "Have a nice day on 0828"
},
{
"date": "0829",
"message": "Have a nice day on 0829"
},
{
"date": "0830",
"message": "Have a nice day on 0830"
},
{
"date": "0831",
"message": "Have a nice day on 0831"
}]
index.js 是
var fs = require("fs");
var contents = fs.readFileSync("trial.json");
var jsonContent = JSON.parse(contents);
console.log("Content", jsonContent)
var today = month + date;
var currentDate;
var selectedCeleb = 0;
for (var index = 0; index < jsonContent.length; ++index) {
var curr = jsonContent[index];
if(curr.date == today){
currentDate = curr;
break;
}
}
console.log("message : " + currentDate.message)
// Request Response Pair
exports.myApp = functions.https.onRequest((request, response) => {
const app = new App({ request, response });
console.log('Request headers: ' + JSON.stringify(request.headers));
console.log('Request body: ' + JSON.stringify(request.body));
function getDayMessage() {
return currentDate.message;
}
function userMessage (app) {
let dayMsg = getDayMessage();
if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
app.ask(app.buildRichResponse()
.addSimpleResponsedayMsg))
} else {
app.ask(dayMsg, NO_INPUTS);
}
}
let actionMap = new Map();
actionMap.set(USER_INTERESTED, userMessage);
app.handleRequest(actionMap);
});
我本地的月+日返回的值为 0829 而在服务器上是0827。
请帮助确定是设置问题还是代码问题,以便我可以更新代码以获得正确的值。
最佳答案
您的本地计算机可能与运行 Cloud Functions 的服务器位于不同的时区。当您在 Date 上使用 getMonth() 和 getDate() 时对象,它们将返回您本地时间的这些值,该日期可能与世界其他时区的日期不同。
getTimezoneOffset()将为您提供您的时区与 UTC 的偏移分钟数:
new Date().getTimezoneOffset()
我住在加利福尼亚州,采用太平洋标准时间,因此在我的本地计算机上返回 420。
Cloud Functions 服务器设置为 UTC,因此该函数返回 0。
您的机器会返回什么?与 Cloud Functions 服务器相比,某些值可能会让您在一天中的大部分时间处于不同的日期。 “正确”的日期取决于您的时区。如果您想要特定的时区,则必须对 Date 对象进行一些数学运算才能获取您要查找的值。
关于javascript - 如何在 node.js 和 Cloud Functions for Firebase 上获取正确的日期和月份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941296/