diff --git a/src/app/dashboard/kalender/_components/admin-termin-modal.tsx b/src/app/dashboard/kalender/_components/admin-termin-modal.tsx index b6c5681..e42c34f 100644 --- a/src/app/dashboard/kalender/_components/admin-termin-modal.tsx +++ b/src/app/dashboard/kalender/_components/admin-termin-modal.tsx @@ -70,6 +70,7 @@ export function AdminTerminModal({ useEffect(() => { if (open) { if (existingTermin) { + // eslint-disable-next-line react-hooks/set-state-in-effect setFormState({ title: existingTermin.title, description: existingTermin.description || "", diff --git a/src/app/dashboard/notdienst/plan/actions.ts b/src/app/dashboard/notdienst/plan/actions.ts index ae87d86..11288ca 100644 --- a/src/app/dashboard/notdienst/plan/actions.ts +++ b/src/app/dashboard/notdienst/plan/actions.ts @@ -47,8 +47,8 @@ export async function generatePlanAction(year?: number, month?: number) { where: { kitaId, date: { - gte: new Date(targetYear, targetMonth - 1, 1), - lt: new Date(targetYear, targetMonth, 1), + gte: new Date(Date.UTC(targetYear, targetMonth - 1, 1)), + lt: new Date(Date.UTC(targetYear, targetMonth, 1)), }, }, include: { child: { select: { familyId: true } } }, @@ -155,7 +155,8 @@ export async function updateAssignmentAction( const session = await requireRole([UserRole.ADMIN, UserRole.KOORDINATOR]); const kitaId = session.user.kitaId!; - const parsedDate = new Date(date); + const [yr, mo, dy] = date.slice(0, 10).split("-").map(Number); + const parsedDate = new Date(Date.UTC(yr, mo - 1, dy)); try { await prisma.$transaction(async (tx) => { diff --git a/src/app/dashboard/notdienst/plan/plan-view.tsx b/src/app/dashboard/notdienst/plan/plan-view.tsx index cf78010..fadaf6a 100644 --- a/src/app/dashboard/notdienst/plan/plan-view.tsx +++ b/src/app/dashboard/notdienst/plan/plan-view.tsx @@ -517,7 +517,8 @@ function PlanPreviewTable({
{days.map((day) => { - const dateObj = new Date(day.date); + const [yr, mo, dy] = day.date.slice(0, 10).split("-").map(Number); + const dateObj = new Date(yr, mo - 1, dy); const assignedChild = allChildren.find( (child) => child.id === day.childId, ); @@ -574,7 +575,8 @@ function ManualAssignmentTable({
{days.map((day) => { - const dateObj = new Date(day.date); + const [yr, mo, dy] = day.date.slice(0, 10).split("-").map(Number); + const dateObj = new Date(yr, mo - 1, dy); const assignedChild = allChildren.find( (child) => child.id === day.childId, ); diff --git a/src/lib/date-utils.ts b/src/lib/date-utils.ts index d9a3a8f..bb6e209 100644 --- a/src/lib/date-utils.ts +++ b/src/lib/date-utils.ts @@ -1,13 +1,8 @@ import { addMonths, - endOfMonth, getDate, getYear, getMonth, - isWeekend, - eachDayOfInterval, - startOfMonth, - startOfDay, format, } from "date-fns"; import { de } from "date-fns/locale"; @@ -36,17 +31,28 @@ export function getTargetMonthData(now = new Date()) { } export function getWorkingDaysOfMonth(year: number, month: number) { - // month ist 1-12, Date erwartet 0-11 - const start = startOfMonth(new Date(year, month - 1)); - const end = endOfMonth(start); + const start = new Date(Date.UTC(year, month - 1, 1)); + const end = new Date(Date.UTC(year, month, 0)); // last day of month - const days = eachDayOfInterval({ start, end }); - - return days - .filter((day) => !isWeekend(day)) - .map((day) => startOfDay(day)); + const days: Date[] = []; + const current = new Date(start); + while (current <= end) { + const dayOfWeek = current.getUTCDay(); // 0 is Sunday, 6 is Saturday + if (dayOfWeek !== 0 && dayOfWeek !== 6) { + days.push(new Date(current)); + } + current.setUTCDate(current.getUTCDate() + 1); + } + return days; } export function formatDateKey(date: Date) { return format(date, "yyyy-MM-dd"); } + +export function formatUtcDateKey(date: Date) { + const yyyy = date.getUTCFullYear(); + const mm = String(date.getUTCMonth() + 1).padStart(2, "0"); + const dd = String(date.getUTCDate()).padStart(2, "0"); + return `${yyyy}-${mm}-${dd}`; +}