如何将 Firestore 日期/时间戳转换为 JS Date()?

IT技术 javascript firebase google-cloud-firestore
2021-02-02 14:00:58

我正在尝试将以下日期转换为 javascript Date() 对象。当我从服务器取回它时,它是一个 Timestamp 对象,

Firebase Firestore 控制台的屏幕截图:

在此处输入图片说明

当我对从 firestore 返回的对象列表尝试以下操作时:

  list.forEach(a => {
    var d = a.record.dateCreated;
    console.log(d, new Date(d), Date(d))
  })

我得到这个输出: 在此处输入图片说明

显然,时间戳全都不同,并且与 2018 年 9 月 9 日(恰好是今天)的日期不同。我也不确定为什么会new Date(Timestamp)导致invalid date. 我是一个 JS 新手,我在日期或时间戳上做错了吗?

6个回答

JavaScript Date 的构造函数对 Firestore Timestamp对象一无所知- 它不知道如何处理它们。

如果要将时间戳转换为日期,请使用时间戳上的toDate()方法。

toDate 不是函数,当我尝试转换时间时,它给出了一些奇怪的 3 个月或 4 个月大的日期
2021-03-20 14:00:58
@blueether 或其他人可以发布一个工作示例?因为我只得到一个错误...toDate() is not a function
2021-03-21 14:00:58
toDate() 不是函数
2021-03-26 14:00:58
@ChiragJoshi 您应该发布一个新问题,充分说明您在做什么以及哪些不符合您的预期。对答案的评论不是一个好地方。
2021-04-02 14:00:58
感谢您的快速答复,这正是我需要的
2021-04-06 14:00:58

您可以使用 toDate() 函数和 toDateString() 来单独显示日期部分。

const date = dateCreated.toDate().toDateString()
//Example: Friday Nov 27 2017

假设您只想要时间部分然后使用 toLocaleTimeString()

const time = dateCreated.toDate().toLocaleTimeString('en-US')
//Example: 01:10:18 AM, the locale part 'en-US' is optional

请使用toDate()方法,然后使用像这样的角管将其转换为格式 -

   {{ row.orderDate.toDate() | date: 'dd MMM hh:mm' }}

您可以使用Timestamp.fromDate.toDate用于来回转换。

// Date to Timestamp
const t = firebase.firestore.Timestamp.fromDate(new Date());

// Timestamp to Date
const d = t.toDate();

如何将 Unix 时间戳转换为 JavaScript 日期对象。

var myDate = a.record.dateCreated;
new Date(myDate._seconds * 1000); // access the '_seconds' attribute within the timestamp object