无法从 Firestore 的 Timestamp 对象获取秒数

问题描述 投票:0回答:1

我正在 Angular 中使用 Firestore 作为后端创建一个 Todo 应用程序。我对 Firebase 非常陌生,在存储和获取日期时遇到问题。

当我从 firebase 和 console.log 获取日期时,我得到如下内容: date: _Timestamp { secondary: 1736290800, nanoseconds: 0 }

我知道要从中获得人类可读的日期,我需要访问其中的秒部分并进行转换。我尝试使用 date.seconds 和 date.getSeconds() 但 .seconds 给了我这个错误:

[错误] TS2339:“日期”类型上不存在属性“秒”。 [插件角度编译器]

src/app/pages/todolist/todolist.component.ts:79:47:
  79 │         console.log("date: ",todo.deadlineDate.seconds);

并且 date.getSeconds() 不被识别为函数。

从 firebase 检索的日期似乎不被识别为 Timestamp 对象。

我尝试使用 Timestamp.fromDate() 创建变量的 Timestamp 对象,但它不起作用。

我将 Angular 18 与 AngularFirestore 一起使用,日期来自用户通过 MatDatePickerModule 和 MatNativeDateModule 输入的内容,并作为日期存储在发送到 firebase 的对象中。

如果有人能解决这个问题,不胜感激。

javascript angular firebase google-cloud-firestore angular18
1个回答
0
投票

根据您的描述,您应该收到某种

Firestore.Timestamp
对象。在这种情况下,您应该将 Timestamp 对象转换为
Date
类型。像这样的东西:

const deadlineDate = todo.deadlineDate; // Assuming this is the Firestore Timestamp
if (deadlineDate && typeof deadlineDate.toDate === 'function') {
    const humanReadableDate = deadlineDate.toDate(); // This will do the trick
    console.log("Converted Date:", humanReadableDate);
} else {
    console.log("Deadline date is not a valid Firestore Timestamp.");
}

之后,您可以将其与 Angular 日期管道一起使用以将其显示在模板中。

来源:https://firebase.google.com/docs/reference/js/firestore_.timestamp.md#timestamptodate

© www.soinside.com 2019 - 2024. All rights reserved.