Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
直接从firebase控制台修改日期会在我的应用程序中产生错误_Firebase_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

直接从firebase控制台修改日期会在我的应用程序中产生错误

直接从firebase控制台修改日期会在我的应用程序中产生错误,firebase,google-cloud-firestore,google-cloud-functions,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在我的应用程序中呈现可读的日期。对于通过云函数/客户端存储的日期,我没有任何问题。但是,如果我做了这些步骤,一切都开始变糟: 通过firestore中的云函数存储日期 直接在firebase控制台中修改日期[!!!] 从云函数中获取修改后的日期(调用它,以便GCF返回序列化的日期) 然后,我得到了这个日期: Object { "_nanoseconds": 0, "_seconds": 1612190050, } 因此,如果我运行此代码: /

我正在我的应用程序中呈现可读的日期。对于通过云函数/客户端存储的日期,我没有任何问题。但是,如果我做了这些步骤,一切都开始变糟:

  • 通过firestore中的云函数存储日期
  • 直接在firebase控制台中修改日期[!!!]
  • 从云函数中获取修改后的日期(调用它,以便GCF返回序列化的日期)
  • 然后,我得到了这个日期:

    Object {
      "_nanoseconds": 0,
      "_seconds": 1612190050,
    }
    
    因此,如果我运行此代码:

    // Convert the date to a Firestore Timestamp if necessary
    if (date._seconds && date._nanoseconds) {
      const { _seconds, _nanoseconds } = date;
      date = new firebase.firestore.Timestamp(_seconds, _nanoseconds);
    }
    
    
    console.log(getReadableTimeSince(date.toDate());
    
    该代码适用于从GCF返回的日期,这些日期没有在Firebase控制台中直接修改。但是,它将为直接接触的对象抛出一个异常:

    date.toDate不是一个函数。(在“date.toDate()”中,“date.toDate”是 (未定义)

    相反,如果我这样做了

     console.log(getReadableTimeSince(date.toDate?.() || date);
    
    一切都很完美,但为什么呢

    为什么
    new firebase.firestore.Timestamp(_秒,_纳秒)
    与之前直接在firebase控制台中修改的序列化日期不兼容

    注:

    GCF返回的日期始终遵循此格式

     {_seconds: 1022322, _nanoseconds: 129921}
    

    对于尚未修改的日期,我可以执行新的
    firebase.firestore.Timestamp(\u秒,\u纳秒)
    ,并能够访问
    .toDate()
    方法

    我不知道什么是firestore,但这段代码

       if (date._seconds && date._nanoseconds)
    
    如果任一字段为零,并且您将纳秒设置为零,则计算结果为false

    Object {
      "_nanoseconds": 0,
      "_seconds": 1612190050,
    }
    

    坚持纳秒为非零的条款在我看来是有缺陷的;zero Nano是完全合法的(虽然可能很少)。

    请确保在Firebase控制台中编辑属性时选择正确的类型,无论是日期对象还是其他类型。问题是_nanos是0,所以我必须进行类型验证以运行关键代码我没有看到它!谢谢