我正在尝试从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
否:我试图在邮递员中获取可读的日期
答案 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)
由于我不知道的原因,它有时不起作用,因此更安全的选择是使用时间戳中的 seconds
和 nanoseconds
属性将其转换为日期如下:
const date = new Date(timestamp.seconds*1000 + timestamp.nanoseconds/100000)
// construct the date from the absolute time in milliseconds
注意: