【问题标题】:Convert timestamp to readable date in Firestore将时间戳转换为 Firestore 中的可读日期
【发布时间】:2020-04-23 14:49:27
【问题描述】:

我正在从collection 获取数据。我以timestamp Firestore 标准格式保存了日期。我就是这样保存record['entryDate'] = firebase.firestore.FieldValue.serverTimestamp();

现在,当我获取它时,我希望它在数组中的新变量中采用可读格式。这是我目前用来获取数据的代码:

home.ts

ngOnInit {
        //start fetch
        this.crudService.read_Projects().subscribe(data => {
          this.projectList = data.map(e => {
            return {
              id: e.payload.doc.id,
              isEdit: false,
              name: e.payload.doc.data()['name'],
              desc: e.payload.doc.data()['desc'],
              followers: e.payload.doc.data()['followers'],
              milestone: e.payload.doc.data()['milestone'],
              entryDate: e.payload.doc.data()['entryDate'],

             // for each readable_entryDate =  how do i convert ?

            };
          })
          console.log(this.projectList);
        });//end fetch
}

crud.service.ts

  read_Projects() {
    return this.firestore.collection('projects').snapshotChanges();
  }

我可以使用get() 执行此操作,但无法在上述代码中执行此操作,以防您希望查看我的get() 代码以获取并将日期转换为可读格式:

 const ref = firebase.firestore().collection('cities').where('name', '==', 'JALANDHAR')
 .get()
 .then(function(querySnapshot) {
   querySnapshot.forEach(function(doc) {
   const timeinmillsecs = doc.data().timestamp.seconds * 1000; //1. get timestamp and make it in milli
   console.log(new Date(timeinmillsecs)); // 2. convert to time lambi string
   let a1 = new Date(timeinmillsecs); // 3. convert to simple date
   let show_year_month_date =  a1.getFullYear()+'/'+(a1.getMonth()+1) +'/'+a1.getDate(); // 3.convert to imple date
   console.log(show_year_month_date); // 4. needed result // will show this on form
 });
 })
 .catch(function(error) {
     console.log("Error getting documents: ", error);
 });

编辑 1

使用ToDate()后,将我的代码改为

entryDate: e.payload.doc.data()['entryDate'].toDate(),

我得到了完整的 JS 日期对象,但我只需要日期,也许在我的数组中的 entryDate2 字段中,我该如何实现?

以下是现在的日期:

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    这不是必需的:

    doc.data().timestamp.seconds * 1000
    

    您可以简单地在 Timestamp 对象上调用 toDate() 来获取 JavaScript 日期。

    之后,您可能希望考虑使用诸如 momentjs 之类的库来根据用户的区域设置和偏好设置日期格式。

    【讨论】:

    • 我如何在这里使用 toDate() entryDate: e.payload.doc.data()['entryDate']
    • entryDate: e.payload.doc.data()['entryDate'].toDate(), 给了我 js 对象,我只需要日期,现在我如何按照我的代码进行操作...有点困惑,我想要 entryDate2,我的数组中只有日期
    • 正如我在回答中所说,您可以考虑使用 momentjs 来格式化该日期。
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2019-05-10
    • 2018-12-09
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多