【问题标题】:Javascript - How to subtract months from Firebase Firestore Timestamp?Javascript - 如何从 Firebase Firestore 时间戳中减去几个月?
【发布时间】:2024-01-21 04:04:01
【问题描述】:

如何从admin.firestore.FieldValue.serverTimestamp() 中减去日期?

假设我想知道 5 个月前的日期。

通过使用new Date() Javascript 对象,我以毫秒为单位获取日期。

我想将它作为时间戳保存在我的 Firestore 数据库中。我怎样才能做到这一点?

更新

我用这个函数来发现日期:

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(...

【问题讨论】:

  • 由于 Firestore 只存储您传入的 Date 值,因此应该像 *.com/questions/7937233/… 一样简单
  • Puf,虽然当我保存 serverTimestamp 时它在 Firestore 控制台中非常漂亮(这样我可以通过迷你日历更改日期、月份等,并且据说数据是时间戳类型)。当我按照您建议的方法进行操作时(并且我在问题中谈到使用标准Date 对象,我宁愿将1508193230712 作为日期,我也可以在我的客户端代码中毫无问题地使用它. 虽然在 Firebase 控制台中进行操作并不好。那么有什么建议吗?
  • 请显示您如何在数据库中保存“5 个月前”的代码。只要您将其编写为 Date 对象,它就应该可以工作,但我们可能会遗漏一些东西。
  • 噗,更新代码
  • 看起来不错,但尚未在数据库中设置任何内容。如果您没有将它们作为数据库中的日期,那是我唯一能想到的。请注意,拥有minimal complete repro for this 真的很有帮助,因为在中间使用 Stack Overflow 交互式调试问题效率低下。

标签: javascript firebase timestamp google-cloud-firestore


【解决方案1】:

当我这样做时

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

打印出来

2018 年 4 月 17 日星期二 21:11:19 GMT-0700(太平洋夏令时间)

不同之处在于您从setMonth 返回结果,这恰好是结果时间戳。来自MDN documentation on setMonth()

返回:1970 年 1 月 1 日 00:00:00 UTC 和更新日期之间的毫秒数。

由于您想返回实际日期,您需要执行以下操作:

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

【讨论】: