From de4d352e1626ec99ebc79c8556ac0a82f02509bd Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Fri, 26 Dec 2025 19:30:35 -0500 Subject: [PATCH 1/2] Fix timetable in negative TZ --- src/utils/date.ts | 5 +++++ src/views/timetable/TimetableView.vue | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/utils/date.ts b/src/utils/date.ts index 489e5582..60b94595 100644 --- a/src/utils/date.ts +++ b/src/utils/date.ts @@ -3,6 +3,11 @@ import { lz } from './utils'; export const getWeekdayName = (date: Date, weekday: 'short' | 'long' = 'short') => date.toLocaleString('ru-RU', { weekday }); +export const parseLocalYmdDate = (ymd: string) => { + const [year, month, day] = ymd.split('-').map(Number); + return new Date(year, month - 1, day); +}; + export const getDateWithDayOffset = (date: Date, offset: number) => { const d = new Date(date); d.setDate(date.getDate() + offset); diff --git a/src/views/timetable/TimetableView.vue b/src/views/timetable/TimetableView.vue index b752b423..95ada9bb 100644 --- a/src/views/timetable/TimetableView.vue +++ b/src/views/timetable/TimetableView.vue @@ -5,7 +5,7 @@ import { computed, ref, watch } from 'vue'; import AsyncEventsList from './AsyncEventsList.vue'; import CalendarDropdown from './CalendarDropdown.vue'; import { useTimetableStore } from '@/store/timetable'; -import { stringifyDate, getDateWithDayOffset } from '@/utils/date'; +import { stringifyDate, getDateWithDayOffset, parseLocalYmdDate } from '@/utils/date'; import { LocalStorage, LocalStorageItem } from '@/models/LocalStorage'; import IrdomLayout from '@/components/IrdomLayout.vue'; import { useToolbar } from '@/store/toolbar'; @@ -39,7 +39,7 @@ toolbar.setup({ }); const date = computed(() => { - return new Date(route.params.date as string); + return parseLocalYmdDate(route.params.date as string); }); // HACK: на каждое изменение даты обновляем компонент Suspense From 281a6a0bf4b09e7c54f607e27ba3ea54000bb857 Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 05:39:39 +0300 Subject: [PATCH 2/2] Fix TZ for CalendarDropdown --- src/App.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/App.vue b/src/App.vue index bdd5221b..56855bad 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,6 +9,7 @@ import { useToolbar } from './store/toolbar'; import IrdomToolbar from './components/IrdomToolbar.vue'; import CalendarDropdown from './views/timetable/CalendarDropdown.vue'; import { apiClient } from '@/api/'; +import { parseLocalYmdDate } from './utils/date'; const profileStore = useProfileStore(); const toolbar = useToolbar(); @@ -44,7 +45,7 @@ onMounted(async () => { >