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}`;
+}