在打字稿中,我可以通过在Cloud Functions Triggers中使用change.after.updateTime
或snap.createTime
来创建带有诸如createdAt,updatedAt作为时间戳的字段的文档。
但是在诸如onUpdate
之类的其他触发器中,假设要存储时间戳的字段change.after.data().updatedAt
给了我一个对象。
如果无法获取它们作为时间戳值,我该如何比较它们?我如何获得该字段作为时间戳值?谢谢
admin.initializeApp();
const firestore = admin.firestore();
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);
export const setCreatedAt = functions.firestore.document('path')
.onCreate(async (snap, context) => {
return snap.ref.update({
createdAt: snap.createTime, // Type Timestamp
updatedAt: snap.createTime // Type Timestamp
});
});
export const setUpdatedAt = functions.firestore.document('path')
.onUpdate(async (change, context) => {
let beforeTimestamp = change.before.data().updatedAt; // Type object, not Timestamp
let afterTimestamp = change.after.data().updatedAt; // Type object, not Timestamp
console.log('beforeTimestamp', beforeTimestamp);
console.log('afterTimestamp', afterTimestamp);
if (change.before.data().updatedAt === change.after.data().updatedAt) {
change.after.ref.update({
updatedAt: change.after.updateTime, // Type Timestamp
});
}
});
似乎{ timestampsInSnapshots: true }
设置无效,因为控制台内仍然有警告。但是为什么呢?
Firestore中存储的Date对象的行为将改变 而且您的应用可能会崩溃
答案 0 :(得分:0)
您需要将返回的Timestamp对象转换为Date对象:
beforeTimestamp.toDate()
然后,您可以将Date对象与< and >
运算符进行比较。如果需要比较相等性,则需要先将日期转换为数字:beforeTimestamp.toDate().getTime()