Получение даты из Firestore в Node.js - PullRequest
0 голосов
/ 17 января 2019

Из документации Firestore о сохранении данных поддерживаемых типов я отмечаю красным цветом:

var docData = {
    //...
    dateExample: new Date("December 10, 1815"),
    //...
    }
};
db.collection("data").doc("one").set(docData).then(function() {
console.log("Document successfully written!");
});

Это то, что я использую в своих облачных функциях для сохранения различных дат в Firestore.Это прекрасно работает!

Моя проблема возникает, когда мне нужно получить эти даты и опубликовать их как String в стороннем API.

Насколько я понял, в Firebase / Firestore датыхранится как метка времени Unix.

Я нигде не смог найти (firebase doc, stackoverflow ...), как правильно преобразовать его в строку.

Я безуспешно пытался сделать следующее:

function timeConverter(UNIX_timestamp){
    var a = new Date(UNIX_timestamp * 1000);
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
    var year = a.getFullYear();
    var month = months[a.getMonth()];
    var date = a.getDate();
    var hour = a.getHours();
    var min = a.getMinutes();
    var sec = a.getSeconds();
    var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
    return time;
  }

admin.firestore().collection('users').doc(userId).get()
    .then( (doc) => {
        const user = doc.data();
        const birthDate = user.birthDate;
        const birthDateString = timeConverter(birthDate);
        console.log(`birthDateString =${birthDateString}`);
     // "birthDateString = NaN undefined NaN NaN:NaN:NaN" 
     });

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Сначала вы можете использовать toDate() для преобразования временной метки Firebase в объект Date, а затем использовать метод toDateString() объекта Date для преобразования его в строку.

const birthDate = user.birthDate.toDate();
const birthDateString = birthDate.toDateString();

Вы также можете проверить Moment.js , это очень помогает при работе с датами и их отображении.

0 голосов
/ 17 января 2019

Это сводится к следующему: как преобразовать метку времени Unix в удобочитаемую дату?

Есть несколько способов сделать это, но один из самых простых - использовать

var readableData = new Date(doc.data().myUnixTimestamp).toLocaleDateString("en-US");

Есть варианты для всех локалей. См. MDN Date.prototype.toLocaleDateString .

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