Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore服务器时间戳+;24小时_Javascript_Firebase_Date_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Javascript Firestore服务器时间戳+;24小时

Javascript Firestore服务器时间戳+;24小时,javascript,firebase,date,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,Date,Google Cloud Firestore,Google Cloud Functions,我正在实现一个定时云功能,删除过期的文档 我在GCF中使用24小时TTL上传内容的做法是: 获取服务器时间戳 计算“expiresAt”日期(类似于new date().addHours(24)) 在谷歌云函数中使用这样的服务器时间戳获取“expiresAt”是正确的方法吗 Date.prototype.addHours = function(hours) { this.setTime(this.getHours() + hours); return this; }

我正在实现一个定时云功能,删除过期的文档

我在GCF中使用24小时TTL上传内容的做法是:

  • 获取服务器时间戳
  • 计算“expiresAt”日期(类似于new date().addHours(24))
  • 在谷歌云函数中使用这样的服务器时间戳获取“expiresAt”是正确的方法吗

     Date.prototype.addHours = function(hours) {
         this.setTime(this.getHours() + hours);
         return this;
     } 
    
     ...
    
     const date = admin.firestore.FieldValue.serverTimestamp();
     const expiresAt = date.toDate().addHours(24);
    
    另外,如果expiresAt是一个日期对象,它在存储时会自动转换为Firestore时间戳吗

    非常感谢。

    您无法真正“获取”Firestore服务器时间戳
    admin.firestore.FieldValue.serverTimestamp()
    返回一个静态令牌值对象,而不是日期。这些令牌在写入时在Firestore服务器上进行评估

    因为您已经在Google后端的云函数中运行代码,所以您可以使用JavaScript计算的当前时间。它将与Firestore中的当前时间相同,但您可以对其进行计算

    const now = Date.now()
    const expiresAt = new Date(now + 24*60*60*1000)
    
    您无法真正“获取”Firestore服务器时间戳
    admin.firestore.FieldValue.serverTimestamp()
    返回一个静态令牌值对象,而不是日期。这些令牌在写入时在Firestore服务器上进行评估

    因为您已经在Google后端的云函数中运行代码,所以您可以使用JavaScript计算的当前时间。它将与Firestore中的当前时间相同,但您可以对其进行计算

    const now = Date.now()
    const expiresAt = new Date(now + 24*60*60*1000)
    

    如果时间戳是UTC,则添加24小时是可以的:
    新日期(Date.now()+8.64e7)
    ,因为在ECMAScript中,UTC天数始终正好是24小时。这不适用于本地时间戳,因为由于DST和历史偏移量的变化,天数并不总是24小时长。在这种情况下,使用
    let d=new Date();d、 setDate(d.getDate()+1)
    。如果时间戳是UTC,那么添加24小时是可以的:
    新日期(Date.now()+8.64e7)
    ,因为在ECMAScript中,UTC天数总是正好24小时。这不适用于本地时间戳,因为由于DST和历史偏移量的变化,天数并不总是24小时长。在这种情况下,使用
    let d=new Date();d、 setDate(d.getDate()+1)
    。这就像一个符咒!这很有魅力!