Преобразовать метку времени в удобочитаемую дату в Firestore - PullRequest
0 голосов
/ 23 апреля 2020

Я получаю данные от 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();
  }

enter image description here

Я могу сделать это, используя get(), но не могу сделать это в приведенном выше коде, если вы хотите sh увидеть мой код 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 в моем массиве, как мне этого добиться?

Ниже показано, как приближается дата:

enter image description here

1 Ответ

1 голос
/ 23 апреля 2020

В этом нет необходимости:

doc.data().timestamp.seconds * 1000

Вы можете просто вызвать toDate () для объекта Timestamp, чтобы получить JavaScript Date.

After что, вы можете захотеть использовать библиотеку, такую ​​как moment js, чтобы отформатировать дату в соответствии с локалью и предпочтениями пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...