使用云函数中的节点矩在 firestore 查询中执行不稳定

Instable execution in firestore query using node moment in cloud function

下面的代码运行在一个函数中正常,但奇怪的是,在其他函数中return出错。这两个函数在同一项目中使用节点 16 和 运行。集合中的字段是时间戳。

...
const moment = require('moment-timezone');
...

var timeInit = moment.tz(new Date(), 'America/Sao_Paulo');
timeInit.startOf("day");

var timeEnd = moment.tz(await addDays (new Date(), 1), 'America/Sao_Paulo');
timeEnd.startOf("day");

const ref = db.collection("myCollection");
const snapshot = await ref.where('fieldtime', '>=', timeInit)
                          .where('fieldtime', '<', timeEnd)                   
                          .get();

错误:参数“value”不是有效的 FieldValue。无法序列化“时刻”类型的对象。 Firestore 不支持具有自定义原型的 JavaScript 对象(即通过 'new' 运算符创建的对象)。 在 Object.exports。 [as isFieldValue] (/workspace/node_modules/@google-cloud/firestore/build/src/validate.js:89:23) 在 CollectionReference.where (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1096:18)

编辑 1: 如果我使用.toDate(),如下:

console.log("timeInit format ", timeInit.format('DD-MM-YYYY HH:mm:ss'));
console.log("timeEnd format ", timeEnd.format('DD-MM-YYYY HH:mm:ss'));

console.log("timeInit todate ", timeInit.toDate());
console.log("timeEnd todate ", timeEnd.toDate());

控制台:

timeInit format 10-01-2022 00:00:00
timeEnd format 11-01-2022 00:00:00
timeInit todate  2022-01-10T03:00:00.000Z
timeEnd todate 2022-01-11T03:00:00.000Z

我是不是把UTC-3弄丢了?

错误信息是:

Couldn't serialize object of type "Moment"

Firestore 有自己的字段内部 Timestamp 对象。查询 Timestamp 字段时,您可以指定 Timestamp 作为值,也可以指定 Date 对象。但是(如错误所述)a Moment 既不是 Timestamp 也不是 Date,因此它不能用作查询的值。

从这个问题来看,您似乎想要在 Moment 对象上调用 toDate() 以获得 Date 返回:Moment.js transform to date object