将日期转换为时间戳以在JavaScript中存储到Firebase Firestore中

Arj*_*ong 9 javascript timestamp date firebase google-cloud-firestore

我目前正在使用Math.floor(Date.now() / 1000)正确的时间戳格式,以将其添加到Firebase中的文档中,但是,时间戳是作为数字而不是作为时间戳插入的。

数

我想按如下所示插入它(作为时间戳,而不是数字)。

在此处输入图片说明

这可能吗?

Sea*_*ayn 25

您可以简单地使用以下行:

var myFirebaseFirestoreTimestampFromDate = firebase.firestore.Timestamp.fromDate(new Date());
Run Code Online (Sandbox Code Playgroud)

.fromDate是一个静态方法静态时间戳类火力地堡

参考:Firebase时间戳文档

  • 如果你正在编写云函数,它会变成“admin.firestore.Timestamp.fromDate()” (7认同)
  • 谢谢,这是最简单的解决方案,正是我正在寻找的!出于某种原因,我发现的文档说您通过构造函数而不是静态方法传递了日期。 (3认同)
  • 直接发送 new Date() 或 Date.now() 就足够了。Firebase/Firestore 自行处理时间戳的转换。另外,您可以使用 moment.js 来处理所有日期操作 (3认同)

Bre*_*ett 13

这有点旧,但只需弄清楚如何在 Svelte 项目中执行此操作即可。我认为这也适用于 React 项目(抱歉对 Vue 不太了解)。更重要的是我使用的是Web 版本 9

import { Timestamp } from "@firebase/firestore";
let noteDate = Timestamp.fromDate(new Date());
Run Code Online (Sandbox Code Playgroud)

只是为了上下文...我将这个新的注释对象添加到 UI 中。当它只是一个 javascript 日期时,它可以在 firebase 中正常工作,但我无法在没有看到 UI 错误的情况下调用所需的 .toDate() 。

<TimeAgo date={note.NoteDate.toDate()} />
Run Code Online (Sandbox Code Playgroud)

因此,将其设为 firebase.Timestamp 是我在对 javascript 日期对象调用 .toDate 时避免 UI 错误的方法。


Has*_*oon 10

我通过使用解决了它:

const created = firebase.firestore.Timestamp.fromDate(new Date()).toDate();
Run Code Online (Sandbox Code Playgroud)

您必须firebase from 'firebase/app'在代码中显式导入。

import * as firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

在实际保存到 firestore 之前,请确保您的created常量或任何常量的类型都是正确的。Date


Jak*_*eam 5

要在 Firestore 中存储日期/时间戳,您需要发送一个Date对象。

例如,对于现有日期,将字段设置为: new Date("December 10, 1815")

文档中提供更多信息。

  • 特别是,“Date.now()”和“Date.parse()”返回纪元号。不要使用它们,而是使用“new Date()”和“new Date(...)”。 (4认同)

小智 5

正如我所看到的,您正在添加日期,您最好使用服务器时间戳并使用以下安全规则来强制执行它。

安全规则

allow create: if request.resource.data.date_added == request.time && 
              // other rules for the message body
Run Code Online (Sandbox Code Playgroud)

客户端JS代码

const message = {
    date_added: firebase.firestore.FieldValue.serverTimestamp();
}
Run Code Online (Sandbox Code Playgroud)

  • 不确定这是否符合 OP 的后续评论:“我不能使用 firebase.database.ServerValue.TIMESTAMP 值,因为我使用的某些日期不是当前日期。” (2认同)

Dou*_*son 5

如果要将字段作为时间戳存储在Firestore中,则必须发送JavaScript Date对象或Firestore Timestamp对象作为字段的值。

如果你想使用日期,只是说new Date(x)这里x是您试图之前添加以毫秒为单位的值。

如果要使用Timestamp,则必须做更多的工作才能将其x转换为秒和纳秒的组合,以传递给构造函数,如文档所示。

  • 你好,Doug)你能提供如何在 Angular 应用程序上创建时间戳的示例吗? (3认同)

Cod*_* YT 5

最好的方法是使用TimestampFirebase提供的类

const {Timestamp} = require("firebase/firestore");
Run Code Online (Sandbox Code Playgroud)

然后

Timestamp.fromDate(new Date())
Run Code Online (Sandbox Code Playgroud)