首页 文章

将日期对象转换为Firestore时间戳

提问于
浏览
0

我正在尝试将日期对象转换为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 回答

  • 0

    在Cloud Firestore中有两种设置日期字段的方法:

    • 为字段指定 Date 值,在这种情况下,您可以完全确定写入的日期 .

    • 指定 firebase.firestore.FieldValue.serverTimestamp() ,在这种情况下服务器写入当前日期 .

    API无法组合这两个选项,您可以使用其中一个 .

    由于您评论您要存储时间戳和偏移量,这也是我存储的内容:

    • timestamp 字段,您让服务器填充 firebase.firestore.FieldValue.serverTimestamp() .

    • a offset 字段,您从应用程序填充的偏移量以天/小时为单位 .

    这样,您可以通过组合这两个字段来重建有效的到期时间戳 .


    您甚至可以添加存储过期时间戳的第三个字段,但这需要额外的写入操作 . 我通常在 Cloud 功能中执行此操作,以确保您完全控制该字段,客户端无法欺骗它 . 如果您不在 Cloud 功能中执行此操作,请考虑编写安全规则,以验证计算字段确实是该计算结果时的值 .

  • 0

    您将无法获得具有JavaScript日期的一致服务器端时间戳 . 相反,从SDK发送服务器时间戳:

    const timestamp = firebase.firestore.FieldValue.serverTimestamp()
    

    如果您仍想将时间戳设置为日期,则可以将 new Date() 传递给Firestore,它将保存为时间戳 .

相关问题