【发布时间】:2021-04-05 09:03:33
【问题描述】:
我有一个每天下午 12 点运行的 cron 作业。它应该抓取当天早上 6 点到中午 12 点之间添加的集合中的所有文档。我正在使用一个名为dateOrderAdded 的字段来运行查询。该字段位于 GMT -4 时区,因此当我运行查询时,我必须满足这一要求。
"use strict";
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.sendTwelvePmOrderSummary = functions.pubsub.schedule("0 12 * * *")
.timeZone("America/Caracas")
.onRun(async context => {
//Get current date
const today = new Date();
//Set time to 6AM
const todaySixAm = new Date(today.setHours(6,0,0,0));
//Set time to 12PM
const todayTwelvePm = new Date(today.setHours(12,0,0,0));
console.log(todaySixAm.valueOf()); //browser - 1609149600000 | cloud fn - 1609135200000
console.log(todayTwelvePm.valueOf()); // browser - 1609171200000 | cloud fn - 1609156800000
//Get all orders in-between today at 6AM and today at 12PM
const orderCol = await admin.firestore().collection('orders').where('dateOrderAdded','>=',todaySixAm).where('dateOrderAdded','<=',todayTwelvePm).get();
const orderDocs = orderCol.docs.map(doc=>doc.data())
if(orderCol.size === 0 ){
//No orders placed - TODO: Send no orders placed email
console.log('No orders placed');
}else{
//orders! - TODO: Send order placement summary
console.log('Orders placed');
}
return null;
}
浏览器似乎适当地将小时数设置为 6 点和 12 点,但在云功能上它仍然是 2 点和 8 点。
由于云函数中的日期是 UTC,因此 2 小时和 8 小时有意义,但我明确将小时数设置为 6 和 12,我不确定为什么我没有看到设置的更改。
【问题讨论】:
-
使用 setHours 时,您设置的是本地时间。为了与 Cloud 保持一致,您似乎需要使用 setUTCHours 设置 UTC 时间。
标签: javascript date google-cloud-firestore google-cloud-functions