javascript - Firebase 时间戳返回错误的日期 - Javascript
问题描述
我正在尝试从 firestore 获取时间戳值(使用 Firebase 函数),并且我已经使用 Timestamp 的 toDate() 方法和矩库成功地在本地完成了它。
moment(doc.data().EndDate.toDate())
但是,当我将代码部署到 firebase 并测试该函数时,toDate() 以某种方式返回的 Date 比 firebase 上保存的时间戳少 1 小时。我想它正在将我的日期转换为UTC,因为我在UTC + 1,并且时间戳也与UTC + 1一起存储在firestore中,但我不知道如何可靠地获取时间戳日期,就像在firestore中一样,无论时区如何。
如果有人知道为什么会发生这种情况或知道如何解决它,那就太好了。
解决方案
Firestore 中的所有时间戳都以 UTC 格式存储。 如果您在 Firebase 控制台中看到不同的内容,那只是您的浏览器将其格式化为您的本地时区。
在 JavaScript 中,所有 Date 对象也以 UTC 表示。如果您将其格式化为字符串,您可能会再次根据您的本地时区获得不同的表示形式。
如果您编写使用日期或时间戳计算值的代码,则应使用 UTC 执行所有计算。这几乎是所有计算系统想要处理的日期。当需要格式化日期以显示给最终用户时,您才应该考虑时区,并根据用户的喜好呈现一些东西。
推荐阅读
- php - 用于文件上传大小的 php.ini 变量
- reactjs - null 不是对象(评估“RNPgReactNativeSdkBridge.startPaymentWEB”)
- flutter - 使用颤振 lint 后,TODO 注释不会出现在问题中作为 VS Code 的警告
- python - Python Pandas 样式突出显示具有不同条件的每一列的特定单元格
- azure-cosmosdb-sqlapi - 在 Cosmos db sql api 中的文档中添加键
- tableau-api - Tableau:计算字段(获取第 n 个订单的日期)
- c# - 将 DateTimeOffset 与夏令时进行比较
- javascript - 根据条件提取和添加标签
- python - pyinstaller 在形成 python exe 时出错
- javascript - 如果函数参数可能是两种不同的类型,如何解决 TypeScript 错误?