簡體   English   中英

Firebase 日期不匹配

[英]Firebase Dates does not match

我真的對 Firebase 中的日期摸不着頭腦 - 我的數據庫中有一條記錄,我保存了一個日期(開始) - 日期設置為 9 月 11 日的開始: 在此處輸入圖像描述 在此處輸入圖像描述

一切都很好,現在當我在我的應用程序中進行查詢時,我想在其中找到記錄,它可以很好地使用以下代碼:

try {
    const startToToday = startOfDay(new Date());
    const startTimestamp = Timestamp.fromDate(startToToday)
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore
    const test = await queryDocuments('client_events', 'start', startTimestamp.toDate());
    console.log('This returns a record', test);
  } catch (e) {
    throw new Error('error ' + e);
  }

但是,當我想在 Firebase Cloud Function 中做同樣的事情時,我沒有得到匹配,這意味着它不相信日期匹配 - 但我基本上也在做同樣的事情(我已經刪除了一些代碼重點關注相關部分)

export const sendDailyClientEventMails = functions.pubsub.schedule("0 0 * * *").onRun(async () => {
  try {
    const events: ClientEvent[] = [];
    const userIds: string[] = [];
    const startOfToday = startOfDay(new Date());
    functions.logger.log("startOfToday", startOfToday);
    const todayTimestamp = admin.firestore.Timestamp.fromDate(startOfToday);
    functions.logger.log("todayTimestamp", todayTimestamp);
    functions.logger.log("toDate", todayTimestamp.toDate());
    // eslint-disable-next-line max-len
    const clientEventsCollection = db.collection("client_events") .where("start", "==", todayTimestamp.toDate());
    // eslint-disable-next-line max-len
    const clientEvents = await clientEventsCollection.get();
    // eslint-disable-next-line max-len
    functions.logger.log("all client events", JSON.stringify(clientEvents.docs)); //This is empty????
  } catch (e) {
    functions.logger.log("Error in function: ", e);
    return null;
  }

  return null;
});

現在,如果我嘗試在 function 中記錄實際事件和“開始”日期,它會在幾秒鍾內返回:

event.start.seconds -> 1662847200

當通過一個紀元轉換器運行它時,它說日期是(這沒有意義嗎?):

GMT: Saturday, September 10, 2022 10:00:00 PM

在記錄我的時間時(9 月 11 日開始) - 我在幾秒鍾內得到了這個:

getStartOfToday Timestamp { _seconds: 1662854400, _nanoseconds: 0 }

當通過紀元轉換器運行它時,它給了我我期望的日期:

GMT: Sunday, September 11, 2022 12:00:00 AM

當比較 firebase 和我當前日期的秒數時,它們不匹配,即使 Firebase 中保存的記錄表明它是相同的日期(見截圖)?

這讓我發瘋了,我一定是忽略了什么? 是與運行雲 function 的服務器不匹配還是什么原因?

基本上,我想要的是找到與當前日期匹配的所有事件,這在客戶端有效,但在雲 function 中運行時卻不行?

Scheduled Cloud Functions 的默認時區是America/Los_Angeles 所以午夜有 7 AM GMT(或 8 取決於夏令時)。 您可以為計划的 function 指定時區,如下所示:

exports.functionName = functions.pubsub.schedule('0 0 * * *')
  .timeZone('UTC') // <-- Timezone
  .onRun((context) => {
  return null;
});

該查詢適用於客戶端,因為您的時間基於您的時區。

使用像Luxon這樣的庫可能更容易處理時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM