javascript - 如何在 Firebase firestore db 中使用正确的时区保存 future 的到期日期

标签 javascript firebase google-cloud-firestore

我正在尝试将一个属性保存到名为“expiration”的 Firebase 文档中。这将是 future 设定的日期,我将在前端检查并查看 Date.now 是否晚于到期日期,如果是,那么我将在 UI 中渲染一个图形来描述它是一个“已过期” “文档。

我尝试将其保存为字符串,但之后我将无法利用带有日期的 firebase 查询功能。如何将此设置为东部时区的 future 日期?

let splitDate = game.gameDate.split("-").map(Number);
let splitTime = game.gameTimeET.split(" ");
let hours = splitTime[0].split(":").map(Number);
let meridian = splitTime[1];
if (meridian === "PM") {
  hours[0] = hours[0]+16
} 
let dateString = new Date(splitDate[0], splitDate[1]-1, splitDate[2], hours[0], hours[1]).toLocaleString("en-US", {timeZone: "America/New_York"});

pollDoc.update({
 expires: dateString
});

日期被保存为字符串。如果我在运行 toLocaleString 之前只保存日期对象,它会使用不正确的时区保存日期。如何将其保存到 Firebase 数据库中的 EST 时区?

最佳答案

就像 unix 纪元时间整数一样,Cloud Firestore 不使用时间戳对象保存时区信息。它们始终以 UTC 格式存储。如果您在控制台中看到时区,那只是呈现给本地计算机配置的时区的时间戳。

时区代表地球上所有人的时间点。如果您需要解释该时间戳以呈现 UI 的日期或时间,则需要自行格式化。如果您需要处理手动输入时间戳的人,则需要将他们的时区概念转换为 UTC 以正确存储。

如果您使用 JavaScript,您可能会找到库 moment有帮助。

关于javascript - 如何在 Firebase firestore db 中使用正确的时区保存 future 的到期日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57352486/

相关文章:

java - 尝试获取集合时,Android Studio 无法识别 .collection 方法

javascript - 我们何时以及如何需要使用 'undefined' 作为值?

javascript - 使用 d3.js 在 svg 上创建关闭按钮

javascript - 如何在 For...of 循环中替换数组中的所有 NaN 值

javascript - 如何在使用鼠标指针移动 div 时平滑移动它?

firebase - Firestore 的 `documentSnapshot.toObject(className::class.java)` 如何重新分配在主构造函数中设置的 `val` 值?

ios - Firebase 查询 - 我得到某种类型的 NSArray 作为结果(只是有时)

firebase - 如何通过 Flutter 在 Firestore 中添加 Geopoint、时间戳和对文档的引用

firebase - 带有通配符路径的 Firestore 云功能触发器

javascript - 云函数: Checking if email exists in users document in Firestore not working