我正在尝试从Firestore获取可读的日期

时间:2019-04-10 08:59:27

标签: node.js firebase express google-cloud-firestore

我正在尝试从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());
        }

我在以下网址阅读了有关类似问题的问题:

How do I convert a Firestore date/Timestamp to a JS Date()?

所以,我试图做同样的事情,并且期望输出可读的日期,尽管它可以给我正确的结果

console.log(timeStamp.toDate());

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

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

否:我试图在邮递员中获取可读的日期

6 个答案:

答案 0 :(得分:1)

您可以通过以下方式尝试

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

您可以使用格式日期功能以所需格式显示。

import moment from "moment";

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

答案 1 :(得分:0)

更改以下行:

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

对此:

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

来自docs

  

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

答案 2 :(得分:0)

您是否尝试过将其更改为

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

答案 3 :(得分:0)

如果文档中的TimePreferred字段是Timestamp,则只需在其上调用Date,即可从其中获得有效的toDate()对象。

所以:

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

这些调用都不是异步的也不返回承诺,因此您不需要await

答案 4 :(得分:0)

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

将其转换为JS数据。
Date(data.seconds)

答案 5 :(得分:0)

由于我不知道的原因,它有时不起作用,因此更安全的选择是使用时间戳中的 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 毫秒