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