增加日期并批量创建Firestore文档



我有一张数据图:

{
name: name,
time: <epoch in seconds>,
}

我的目标是在Firestore中用这些数据创建6个文档,但对于每个文档,time字段应该增加1周。因此,如果我的初始时间是epoch中的2019年11月17日星期日,则应该有6个具有time(作为Firestore时间戳(的文档。2019年11日星期日、2019年11年24日星期日和2019年12月1日星期日等。

我正在使用https云功能,并尝试这样做:

var name = 'test';
var time = 1573992000; // 7 AM EST on Sun, Nov 17 2019
var data = {
name: name,
time: time,
};
var start = new Date(time * 1000); // convert to milliseconds
var i;
for (i = 0; i < 6; i++) {
var ref = db.collection('shifts').doc();
start.setDate(new Date(start) + 7);
data['time'] = new admin.firestore.Timestamp(start.getTime() / 1000, 0);
batch.set(ref, data);
}
return batch.commit();

但所有文件都在同一时间(初始文件后6周(出现在firestore中。我的猜测是,批次只设置了最新的值。如何避免这种情况而不必创建6个单独的映射?

在我看来,你对日期的使用总体上是不正确的。

setDate((将月份的日期设置为确切的值,如果需要容纳超过月份允许的值,它将不会增加月份(也就是说,如果超过32,没有一个月份会接受这一点(。

这对我来说也没有意义:new Date(start) + 7。你不能简单地在日期对象中添加7。看起来你可能想在日期中所代表的月份的日期上加7。但同样,如果给定月份的值太高,那就不会像你预期的那样工作。

综合考虑,Date对象在这里不会对您有太大帮助。我建议对整数进行日期计算。例如,如果您的开始时间是:

var time = 1573992000

你可以这样添加7天的秒数:

time + (7 * 24 * 60 * 60)

这应该更容易使用。

最新更新