Fix: gunakan Intl.DateTimeFormat dengan timezone Asia/Jakarta untuk konsistensi di semua browser dan server

This commit is contained in:
mwpn
2025-12-19 05:44:55 +07:00
parent 445e7b82ff
commit 706fd02655
3 changed files with 36 additions and 9 deletions

View File

@@ -842,10 +842,18 @@
setInterval(updateRealtimeStatus, 1000); setInterval(updateRealtimeStatus, 1000);
// Helper function untuk mendapatkan tanggal hari ini dalam timezone Indonesia (UTC+7) // Helper function untuk mendapatkan tanggal hari ini dalam timezone Indonesia (UTC+7)
// Menggunakan Intl.DateTimeFormat untuk mendapatkan tanggal yang konsisten di semua browser
function getTodayIndonesia() { function getTodayIndonesia() {
const now = new Date(); const now = new Date();
const indonesiaTime = new Date(now.getTime() + (7 * 60 * 60 * 1000)); // UTC+7 // Format tanggal dalam timezone Asia/Jakarta (UTC+7)
return indonesiaTime.toISOString().split('T')[0]; const formatter = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Asia/Jakarta',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
// Format: YYYY-MM-DD
return formatter.format(now);
} }
// Init // Init

View File

@@ -20,10 +20,18 @@ import {
} from './charts.js'; } from './charts.js';
// Helper function untuk mendapatkan tanggal hari ini dalam timezone Indonesia (UTC+7) // Helper function untuk mendapatkan tanggal hari ini dalam timezone Indonesia (UTC+7)
// Menggunakan Intl.DateTimeFormat untuk mendapatkan tanggal yang konsisten di semua browser
function getTodayIndonesia() { function getTodayIndonesia() {
const now = new Date(); const now = new Date();
const indonesiaTime = new Date(now.getTime() + (7 * 60 * 60 * 1000)); // UTC+7 // Format tanggal dalam timezone Asia/Jakarta (UTC+7)
return indonesiaTime.toISOString().split('T')[0]; const formatter = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Asia/Jakarta',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
// Format: YYYY-MM-DD
return formatter.format(now);
} }
// State akan di-set ke hari ini saat DOMContentLoaded // State akan di-set ke hari ini saat DOMContentLoaded
@@ -76,10 +84,15 @@ async function getLastAvailableDate() {
// Jika tidak ada data kemarin, cek 7 hari terakhir (gunakan timezone Indonesia UTC+7) // Jika tidak ada data kemarin, cek 7 hari terakhir (gunakan timezone Indonesia UTC+7)
const now = new Date(); const now = new Date();
const indonesiaTime = new Date(now.getTime() + (7 * 60 * 60 * 1000)); // UTC+7 const formatter = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Asia/Jakarta',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
for (let i = 2; i <= 7; i++) { for (let i = 2; i <= 7; i++) {
const prevDate = new Date(indonesiaTime.getTime() - (i * 24 * 60 * 60 * 1000)); const prevDate = new Date(now.getTime() - (i * 24 * 60 * 60 * 1000));
const prevDateStr = prevDate.toISOString().split('T')[0]; const prevDateStr = formatter.format(prevDate);
const prevData = await apiGetSummary({ date: prevDateStr }); const prevData = await apiGetSummary({ date: prevDateStr });
console.log(`[Dashboard] getLastAvailableDate - ${i} days ago (${prevDateStr}) data:`, prevData); console.log(`[Dashboard] getLastAvailableDate - ${i} days ago (${prevDateStr}) data:`, prevData);

View File

@@ -94,8 +94,14 @@ class RealtimeManager {
// Struktur response setelah di-unwrap: { total_count_today, total_amount_today, by_gate, by_category } // Struktur response setelah di-unwrap: { total_count_today, total_amount_today, by_gate, by_category }
// Gunakan timezone Indonesia UTC+7 untuk mendapatkan tanggal lokal yang benar // Gunakan timezone Indonesia UTC+7 untuk mendapatkan tanggal lokal yang benar
const now = new Date(); const now = new Date();
const indonesiaTime = new Date(now.getTime() + (7 * 60 * 60 * 1000)); // UTC+7 // Format tanggal dalam timezone Asia/Jakarta (UTC+7)
const today = indonesiaTime.toISOString().split('T')[0]; const formatter = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Asia/Jakarta',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
const today = formatter.format(now);
const snapshot = await apiGetRealtimeSnapshot({ const snapshot = await apiGetRealtimeSnapshot({
date: today, date: today,
location_code: '' // bisa diambil dari state dashboard jika perlu location_code: '' // bisa diambil dari state dashboard jika perlu