javascript - 如何在 node.js 和 Cloud Functions for Firebase 上获取正确的日期和月份?

标签 javascript node.js firebase google-cloud-functions

我在 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/

相关文章:

javascript - 检测 Web 下拉菜单是否要显示在屏幕外

android - google-services.json”已找到,但它表示您似乎无权访问的项目 ID

javascript - 找不到为导入语句抛出的规则 'jsx-a11y/img-has-alt' 的定义

php - Firebase token 验证

arrays - 如何正确地将 Firebase 中的数据添加到数组中?

javascript - 如何在 Windows Phone 8 应用程序中加载 javascript 文件?

javascript - 在 Android 数字上运行的 Java web 应用程序

javascript - 测试未运行服务模拟 promise (.then)

javascript - 在 typescript 项目中加载 npm 模块

node.js - firebase 云功能发布请求正文