NodeJS 我正试图从firestore得到可读的数据

z2acfund  于 2023-03-29  发布在  Node.js
关注(0)|答案(8)|浏览(149)

我试图从我的firestore数据库中的时间戳数据类型中获取可读的日期。

for (var ticketDoc of ticketsSnapshot.docs) {
            var timeStamp = await ticketDoc.data().TimePreferred;
            console.log(timeStamp.toDate());
            var time = new Date(timeStamp).toDate();
            ticketDoc.data().TimePreferred = time;
            tickets.push(ticketDoc.data());
        }

我在以下网站上读到了一个类似的问题:
如何将Firestore日期/时间戳转换为JS Date()?
所以,我尝试做同样的事情,我希望输出可读的日期,虽然它给了我正确的结果

console.log(timeStamp.toDate());

但它也给了我一个错误。控制台输出如下:-

2019-04-10T06:30:00.000Z
TypeError: (intermediate value).toDate is not a function

不是:我正试图在 Postman 得到可读的日期

yqyhoc1h

yqyhoc1h1#

我不知道为什么这个timestamp对象没有.toDate()扩展名,但是如果它有'seconds'和'nanoseconds'属性,你可以用

Date(data.seconds)
kjthegm6

kjthegm62#

更改以下行:

var time = new Date(timeStamp).toDate();

变成这样:

var time = new Date(timeStamp).toDateString();

docs
一个字符串,以美式英语的可读形式表示给定Date对象的日期部分。

gmxoilav

gmxoilav3#

你可以用下面的方法试试

{{ formatDate(new Date(data.seconds*1000)) }}

您可以使用format date函数以所需格式显示。

import moment from "moment";

  format_date(value) {
    if (value) {
      return moment(String(value)).format("DD/MM/YYYY");
    }
  },
omtl5h9j

omtl5h9j4#

由于我不知道的原因,它有时不工作,所以更安全的选择是使用时间戳中的secondsnanoseconds属性将其转换为日期,如下所示:

const date = new Date(timestamp.seconds*1000 + timestamp.nanoseconds/100000) 
// construct the date from the absolute time in milliseconds

注:

  • 1秒= 1000毫秒
  • 1纳秒= 10^-6 ms
w1e3prcc

w1e3prcc5#

你试过把这个改成

var time = (new Date(timeStamp)).toDateString();
i7uaboj4

i7uaboj46#

如果文档中的TimePreferred字段是一个Timestamp,则只需对它调用toDate()即可从中获取有效的Date对象。
因此:

for (var ticketDoc of ticketsSnapshot.docs) {
    var date = ticketDoc.data().TimePreferred.toDate();
}

这些调用都不是异步的,也没有返回promise,所以不需要await

nkcskrwz

nkcskrwz7#

你必须首先确保timestamp对象是真正的Timestamp类型。要做到这一点,在你从Firebase获得Timestamp之后,创建Timestamp对象:

const timestampObject: Timestamp = !!timeStamp
      ? new Timestamp(timeStamp.seconds, timeStamp.nanoseconds)
      : null;
8ulbf1ek

8ulbf1ek8#

对于Angular

import { Location, DatePipe } from '@angular/common';

constructor(
    public datepipe: DatePipe
  ) { }

const dayAsTimestamp = your_Timestamp_value;
const dayAsDate = new Date(dayAsTimestamp.seconds * 1000);
const dayAsString = this.datepipe.transform(dayAsDate, 'dd-MMM-yyyy');

相关问题