【发布时间】:2020-11-02 16:53:36
【问题描述】:
我正在尝试从 firestore 获取 Timestamp 值(使用 Firebase 函数),并且我已经使用 Timestamp 的 toDate() 方法和矩库成功地在本地完成了它。
moment(doc.data().EndDate.toDate())
但是,当我将代码部署到 firebase 并测试该函数时,toDate() 以某种方式返回的 Date 比 firebase 上保存的时间戳少 1 小时。我想它正在将我的日期转换为UTC,因为我在UTC + 1,并且时间戳也与UTC + 1一起存储在firestore中,但我不知道如何可靠地获取时间戳日期,就像在firestore中一样,不分时区。
如果有人知道为什么会发生这种情况或知道如何解决它,那就太好了。
【问题讨论】:
-
当您致电
console.log(doc.data().EndDate.toDate())时,您究竟会得到什么?日期是如何存储的?无论如何,理解这一点的关键是July 13, 14:17 GMT+1与July 13, 13:17 GMT+0的时间戳完全相同。所以主要问题是你的firebase是否存储了正确的时间戳。一旦确定,我们就可以专注于在适当的时区显示它。 -
我收到
2020-07-19T23:00:00.000Z并且 Firestore 日期是 2020-07-20T00:00:00。日期使用firebase.firestore.Timestamp.fromDate(subEndDate)存储,其中 subEndDate 是 javascript 日期。 -
是的,我用它来比较两个日期,由于返回的日期少于一小时,这也意味着在这种情况下它少了一天,并且不再进行比较。我也使用过 toString(),但同样,只有在本地服务时才有效
-
你能贴出你用来比较的代码吗?需要明确的是,您很可能通过错误地比较日期来制造问题。您所在时区的午夜是 UTC 前一天的 23:00,因此这些日期可能完全相同,只是您的浏览器将其中一个转换为本地时间,字符串比较不适合比较 Date 对象。
-
是的,我使用了 isSame:
if(moment(subEnd).isSame(moment(today))的时刻,今天是一个新的日期。是的,这是真的,它是同一时间,但是当时区开始起作用时,它不是。感谢您的帮助
标签: javascript reactjs firebase google-cloud-firestore timestamp