我正在尝试将日期对象转换为Firestore时间戳 .
var dateOBJ = new Date();
var timeStamp = new firebase.firestore.Timestamp(dateOBJ);
这给了我一个错误:
Uncaught Error: Timestamp seconds out of range: Sun Dec 09 2018 11:37:05 GMT+0100
我尝试使用.getTime()/ 1000将日期对象首先转换为秒,但它仍然超出范围 .
时间戳将是网址的到期日期,因此我需要为它添加一些时间 .
2 回答
在Cloud Firestore中有两种设置日期字段的方法:
为字段指定
Date
值,在这种情况下,您可以完全确定写入的日期 .指定
firebase.firestore.FieldValue.serverTimestamp()
,在这种情况下服务器写入当前日期 .API无法组合这两个选项,您可以使用其中一个 .
由于您评论您要存储时间戳和偏移量,这也是我存储的内容:
timestamp
字段,您让服务器填充firebase.firestore.FieldValue.serverTimestamp()
.a
offset
字段,您从应用程序填充的偏移量以天/小时为单位 .这样,您可以通过组合这两个字段来重建有效的到期时间戳 .
您甚至可以添加存储过期时间戳的第三个字段,但这需要额外的写入操作 . 我通常在 Cloud 功能中执行此操作,以确保您完全控制该字段,客户端无法欺骗它 . 如果您不在 Cloud 功能中执行此操作,请考虑编写安全规则,以验证计算字段确实是该计算结果时的值 .
您将无法获得具有JavaScript日期的一致服务器端时间戳 . 相反,从SDK发送服务器时间戳:
如果您仍想将时间戳设置为日期,则可以将
new Date()
传递给Firestore,它将保存为时间戳 .