Javascript 如何在node.js和Firebase的云函数上获得正确的日期和月份?

Javascript 如何在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

我在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 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并尝试,这次它工作正常,会不会有缓存日期之类的情况?你的函数代码看起来不像一个完整的函数