Javascript 如何在node.js和Firebase的云函数上获得正确的日期和月份?
我在Firebase的云函数上使用的节点服务器上使用纯javascript。 json名称为:trial.jsonJavascript 如何在node.js和Firebase的云函数上获得正确的日期和月份?,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我在Firebase的云函数上使用的节点服务器上使用纯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 o
[{
"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);
});
var fs=require(“fs”);
var contents=fs.readFileSync(“trial.json”);
var jsonContent=JSON.parse(contents);
log(“Content”,jsonContent)
var今日=月份+日期;
var当前日期;
var selectedCeleb=0;
对于(var索引=0;索引{
const-app=新应用程序({request,response});
log('Request headers:'+JSON.stringify(Request.headers));
log('Request body:'+JSON.stringify(Request.body));
函数getDayMessage(){
返回currentDate.message;
}
功能userMessage(应用程序){
让dayMsg=getDayMessage();
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
app.ask(app.buildrichsresponse()
.addSimpleResponsedayMsg)
}否则{
应用程序询问(dayMsg,无输入);
}
}
让actionMap=newmap();
actionMap.set(用户感兴趣,用户消息);
应用程序HandlerRequest(行动地图);
});
我的本地计算机上月+日的返回值为0829
而在服务器上是0827
请帮助确定是设置问题还是代码问题,以便我可以更新代码以获得正确的值。您的本地计算机可能与运行云功能的服务器位于不同的时区。在对象上使用getMonth()和getDate()时,它们将在本地时间返回这些值,该时间可能与世界上其他时区的日期不同 将为您提供时区偏离UTC的分钟数:
new Date().getTimezoneOffset()
我住在太平洋标准时间的加利福尼亚州,所以我的本地机器返回420
云函数服务器设置为UTC,因此函数返回0
你的机器有什么回报?与云服务器相比,可能有一些价值使您在一天的大部分时间处于不同的日期。“正确”日期取决于您所在的时区。如果您想要一个特定的时区,您必须对Date对象进行一些计算,以获得您要查找的值。您的本地计算机可能与运行云功能的服务器位于不同的时区。在对象上使用getMonth()和getDate()时,它们将在本地时间返回这些值,该时间可能与世界上其他时区的日期不同 将为您提供时区偏离UTC的分钟数:
new Date().getTimezoneOffset()
我住在太平洋标准时间的加利福尼亚州,所以我的本地机器返回420
云函数服务器设置为UTC,因此函数返回0
你的机器有什么回报?与云服务器相比,可能有一些价值使您在一天的大部分时间处于不同的日期。“正确”日期取决于您所在的时区。如果你想要一个特定的时区,你必须对Date对象做一些数学运算,才能得到你想要的值。DougStevenson:
不确定会有什么解释,但只是降级以使其正确工作。因此,无论这场大火(现收现付)在做什么,都是问题的根源。我当然会保持开放,稍后再讨论
道格拉斯·史蒂文森:
不确定会有什么解释,但只是降级以使其正确工作。因此,无论这场大火(现收现付)在做什么,都是问题的根源。我当然会保持开放,稍后再讨论
如何解释两天的差异?您确定机器上的时钟设置正确吗?我机器上日期对象的toutString()值与云函数的值匹配,这意味着它们是同步的。我不是OP,但我运行了他的代码,得到了0829。你得到0827了吗@道格拉斯·史蒂文森的时钟在哪台机器上?本地似乎是正确的我们需要在Firebase云函数上设置什么吗?我可以通过任何方式登录到机器(服务器)并检查这些值吗?据我所知,云功能是正确的。如果不是这样,那将是灾难性的。谷歌花了很多精力来确保服务器日期正确。2天的差异是如何解释的?你确定你机器上的时钟设置正确吗?我机器上日期对象的toutString()值与云函数的值匹配,这意味着它们是同步的。我不是OP,但我运行了他的代码,得到了0829。你得到0827了吗@道格拉斯·史蒂文森的时钟在哪台机器上?本地似乎是正确的我们需要在Firebase云函数上设置什么吗?我可以通过任何方式登录到机器(服务器)并检查这些值吗?据我所知,云功能是正确的。如果不是这样,那将是灾难性的。谷歌花了大量精力确保服务器日期正确。我的项目正在进行中,无法复制。请联系Firebase支持@DoughStevenson所以每次它返回0829?是的,当我在HTTP函数中运行代码时,由HTTP请求触发。我改回blaze并尝试,这次它工作正常,会不会有缓存日期之类的情况?你的函数代码看起来不像一个完整的函数。你的模块输出在哪里?它是什么样的功能?数据库触发器?HTTP?还有别的吗?你是怎么触发的?我的项目正在进行中,我无法复制。请联系Firebase支持@DoughStevenson所以每次它返回0829?是的,当我在HTTP函数中运行代码时,由HTTP请求触发。我改回blaze并尝试,这次它工作正常,会不会有缓存日期之类的情况?你的函数代码看起来不像一个完整的函数