diff --git a/frontend/src/components/common/DateRangePicker.vue b/frontend/src/components/common/DateRangePicker.vue index be641f9b..4fce029f 100644 --- a/frontend/src/components/common/DateRangePicker.vue +++ b/frontend/src/components/common/DateRangePicker.vue @@ -59,7 +59,7 @@ @@ -85,7 +85,7 @@ type="date" v-model="localEndDate" :min="localStartDate" - :max="today" + :max="tomorrow" class="date-picker-input" @change="onDateChange" /> @@ -144,6 +144,14 @@ const today = computed(() => { return `${year}-${month}-${day}` }) +// Tomorrow's date - used for max date to handle timezone differences +// When user is in a timezone behind the server, "today" on server might be "tomorrow" locally +const tomorrow = computed(() => { + const d = new Date() + d.setDate(d.getDate() + 1) + return formatDateToString(d) +}) + // Helper function to format date to YYYY-MM-DD using local timezone const formatDateToString = (date: Date): string => { const year = date.getFullYear() diff --git a/frontend/src/views/admin/UsageView.vue b/frontend/src/views/admin/UsageView.vue index 85a748f4..ac5d1e05 100644 --- a/frontend/src/views/admin/UsageView.vue +++ b/frontend/src/views/admin/UsageView.vue @@ -888,13 +888,17 @@ const formatLocalDate = (date: Date): string => { } // Initialize date range immediately +// Use tomorrow as end date to handle timezone differences between client and server +// e.g., when server is in Asia/Shanghai and client is in America/Chicago const now = new Date() +const tomorrow = new Date(now) +tomorrow.setDate(tomorrow.getDate() + 1) const weekAgo = new Date(now) weekAgo.setDate(weekAgo.getDate() - 6) // Date range state const startDate = ref(formatLocalDate(weekAgo)) -const endDate = ref(formatLocalDate(now)) +const endDate = ref(formatLocalDate(tomorrow)) const filters = ref({ user_id: undefined, @@ -1215,12 +1219,14 @@ const resetFilters = () => { end_date: undefined } granularity.value = 'day' - // Reset date range to default (last 7 days) + // Reset date range to default (last 7 days, with tomorrow as end to handle timezone differences) const now = new Date() + const tomorrowDate = new Date(now) + tomorrowDate.setDate(tomorrowDate.getDate() + 1) const weekAgo = new Date(now) weekAgo.setDate(weekAgo.getDate() - 6) startDate.value = formatLocalDate(weekAgo) - endDate.value = formatLocalDate(now) + endDate.value = formatLocalDate(tomorrowDate) filters.value.start_date = startDate.value filters.value.end_date = endDate.value pagination.value.page = 1