From 642fc3171f5e0ac75610be96794792e1ed92d28c Mon Sep 17 00:00:00 2001 From: 12975 <1297598740@qq.com> Date: Wed, 28 Jan 2026 22:05:23 +0800 Subject: [PATCH] =?UTF-8?q?-deat=20=E4=BF=AE=E5=A4=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Home/Home.tsx | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx index fd0ee56..0f68fab 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Home/Home.tsx @@ -68,6 +68,14 @@ function Home() { setLoading(true); setError(null); + // Helper for local date string YYYY-MM-DD to fix timezone issues + const toLocalDate = (d: Date) => { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + }; + // Calculate dates for today, yesterday, and last week same day const today = new Date(); const yesterday = new Date(today); @@ -75,9 +83,9 @@ function Home() { const lastWeek = new Date(today); lastWeek.setDate(lastWeek.getDate() - 7); - const todayStr = today.toISOString().split('T')[0]; - const yesterdayStr = yesterday.toISOString().split('T')[0]; - const lastWeekStr = lastWeek.toISOString().split('T')[0]; + const todayStr = toLocalDate(today); + const yesterdayStr = toLocalDate(yesterday); + const lastWeekStr = toLocalDate(lastWeek); // Load accounts, recent transactions, today/yesterday stats... AND last week const [accountsData, transactionsData, categoriesData, ledgersData, settingsData, budgetsData, todayData, yesterdayData, lastWeekData, streakData] = await Promise.all([ @@ -103,17 +111,22 @@ function Home() { setTodaySpend(calculateTotalExpense(todayData.items)); setTodayTransactions(todayData.items || []); setYesterdaySpend(calculateTotalExpense(yesterdayData.items)); - setLastWeekSpend(calculateTotalExpense(lastWeekData.items)); // Store this in new state + setLastWeekSpend(calculateTotalExpense(lastWeekData.items)); - // Calculate monthly budget stats + // Calculate monthly budget stats (Normalized) let mTotal = 0; let mSpent = 0; - // ... (budgetsData || []).forEach((b: any) => { - if (b.periodType === 'monthly') { - mTotal += b.amount; - mSpent += (b.spent || 0); - } + let multiplier = 1; + if (b.periodType === 'daily') multiplier = 30; + else if (b.periodType === 'weekly') multiplier = 4.3; + else if (b.periodType === 'yearly') multiplier = 1 / 12; + + mTotal += b.amount * multiplier; + // We add the actual spent amount regardless of period, as it contributes to "Monthly Spending" in a general sense + // But strictly speaking, Daily spent resets daily. + // For the purpose of "Monthly Overview", we just want to know if there IS a budget. + mSpent += (b.spent || 0); }); setMonthlyBudgetTotal(mTotal); setMonthlyBudgetSpentTotal(mSpent);