JavaScript - Как вычесть месяцы из Firebase Firestore Timestamp?

1

Как вычесть дату из admin.firestore.FieldValue.serverTimestamp()?

Скажем, я хочу знать дату 5 месяцев назад.

Используя new Date() объект new Date() Javascript, я получаю дату в миллисекундах.

Я хотел бы сохранить его, но как временную метку в моей Firestore Database. Как я могу это сделать?

ОБНОВЛЕНИЕ:

Я использую эту функцию для обнаружения даты:

function findBirthdate(age){
    var monthsAgo; 
    switch(age){
       case "_6months":
           monthsAgo = 3;
           break;
       case "6_12months":
           monthsAgo = 9;
           break;
       case "12_18months":
           monthsAgo = 15;
           break;
       case "18_24months":
           monthsAgo = 21;
           break;
       case "24_months":
           monthsAgo = 28;
           break;
       default:
           return;
   }

   var now = new Date();
   return now.setMonth(now.getMonth() - monthsAgo);
}

Итак, я называю var birth = findBirthdate(age) и отправляю birth в Firestore, как в

admin.firestore()....update({ birthdate: birth }).then(...

  • 0
    Поскольку Firestore просто хранит значение Date вы передаете, это должно быть так же просто, как stackoverflow.com/questions/7937233/…
  • 0
    Однако, случается так, что когда я сохраняю serverTimestamp она довольно красива в консоли Firestore (так что я могу менять дни, месяцы и т. Д. С помощью мини-календаря, и данные, как говорят, имеют тип timestamp). Когда я использую метод, который вы предложили (и о котором я говорил в моем вопросе как об использовании стандартного объекта Date , я скорее получаю 1508193230712 в качестве Date, который я мог бы также использовать в своем клиентском коде без проблем. Это не так. хорошо, хотя для манипуляций в консоли Firebase. Есть предложения тогда?
Показать ещё 4 комментария
Теги:
firebase
timestamp
google-cloud-firestore

1 ответ

0
Лучший ответ

Когда я делаю

var date = new Date(); 
date.setMonth(date.getMonth() - 3); 
console.log(date);

Он печатает

Вт 17 апр 2018 21:11:19 GMT-0700 (Pacific Daylight Time)

Разница в том, что вы возвращаете результат из setMonth, который является результирующей меткой времени. Из документации MDN на setMonth():

Возвраты: количество миллисекунд между 1 января 1970 года 00:00:00 UTC и обновленная дата.

Поскольку вы хотите вернуть фактическую дату, вам нужно будет:

var now = new Date();
now.setMonth(now.getMonth() - monthsAgo);
return now;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню