【问题标题】:How to store date in Firestore from client side without importing firebase-admin?如何在不导入 firebase-admin 的情况下从客户端将日期存储在 Firestore 中?
【发布时间】:2021-07-09 12:25:05
【问题描述】:

我想在客户端使用 serverTimestamp 之类的方法,但要做到这一点,我需要包含 firebase-admin 包,这会增加客户端包的大小。

import * as firebaseAdmin from "firebase-admin";
if (!firebaseAdmin.apps.length) {
  firebaseAdmin.initializeApp();
}

const firebaseTimestamp = firebaseAdmin.firestore.FieldValue.serverTimestamp();

const initDate = firebaseAdmin.firestore.Timestamp.fromDate(
    new Date(Date.UTC(0, 0, 0, 0, 0, 0))
  );

是否有任何轻量级的解决方案可以从客户端访问 firebase 时间戳方法?

我不确定我是否可以放弃servertimestamp 并使用new Date(),因为它与当前时区有关。我想将时间存储在与任何时区无关的 Firestore(从客户端)中,以后我应该能够根据该 Date 参数查询 Firestore。

参考:https://firebase.google.com/docs/reference/node/firebase.firestore.Timestamp

【问题讨论】:

  • 你可以使用Date.now(),它总是返回从1970-blah-blah UTC经过的毫秒数
  • 如果我将其存储为时间戳,那么如何根据日期格式进行查询,例如获取日期 A 和 B 之间的行?

标签: javascript firebase datetime google-cloud-firestore


【解决方案1】:

不得在客户端导入 Firebase Admin SDK。它需要服务帐户才能运行并具有管理员权限,即不遵守任何安全规则并且对您的 Firebase 项目具有完全访问权限。

您也可以使用客户端 SDK 添加时间戳:

firebase.firestore.FieldValue.serverTimestamp()

您可以在documentation 中阅读更多相关信息

您也可以使用UNIX Timestamps 并且不会遇到时区问题。

它是自 Unix 纪元以来经过的秒数,减去闰秒; Unix 纪元是 1970 年 1 月 1 日 00:00:00 UTC;

const timestamp = Date.now()

那么就可以使用JSDate对象将其格式化成任意格式了。

【讨论】:

  • 那么你可以使用 JS Date 对象将其格式化为任何格式。 > 如何在 Firestore 中存储为 UTC Date 对象?
  • 另外,Date.now 返回毫秒而不是秒
  • @GorvGoyl new Date(Date.now()).toUTCString() 获取 UTC 时间字符串。此外,您可以将数字时间戳存储在数据库中,以便于查询。您可以在其他任何地方使用 Date 对象对其进行格式化。
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多