Node.js 如何在查询中使用firestore.FieldValue.serverTimestamp()

Node.js 如何在查询中使用firestore.FieldValue.serverTimestamp(),node.js,google-cloud-firestore,Node.js,Google Cloud Firestore,我想在google cloud firestore中创建一个查询,以检索过去10小时内创建的数据,但我想使用服务器日期作为帐户的基础 比如: this.afs.collection<any>("posts/", ref => { let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref; tenHoursAgo = firebase.firestore.Fiel

我想在google cloud firestore中创建一个查询,以检索过去10小时内创建的数据,但我想使用服务器日期作为帐户的基础

比如:

this.afs.collection<any>("posts/", ref => {
  let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;

  tenHoursAgo = firebase.firestore.FieldValue.serverTimestamp() - 10; 
  query = query.where('created', '>', tenHoursAgo);

  return query.orderBy('created');
}).snapshotChanges()
this.afs.collection(“posts/”,ref=>{
let query:firebase.firestore.CollectionReference | firebase.firestore.query=ref;
tenHoursAgo=firebase.firestore.FieldValue.serverTimestamp()-10;
query=query.where('created','>',tenHoursAgo);
return query.orderBy('created');
}).snapshotChanges()

我该怎么做?谢谢您的帮助。

您不能在查询中使用
FieldValue.serverTimestamp()
作为值

有两种可能的解决方法:

  • 最简单的接近方法是使用客户端的本地当前时间戳:
    newdate()

  • 更复杂的替代方法是让客户端编写
    字段值.serverTimestamp()
    ,然后将其读回,并在查询中使用结果值

    这将使您免受客户时钟偏差的影响。这是否值得额外的复杂性由你决定


  • 约会很难,我也没那么聪明。。但也许真正的答案是我们在查询Firestore时不需要担心时区?看起来Firestore将日期对象存储为utc(从时间戳文档中),我假设查询方法在与具有时区信息的日期对象进行比较时会考虑到这一点,对吗?