gute
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
// src/data/holidays-bw.ts
|
||||
var BW_SCHOOL_HOLIDAYS = [
|
||||
// Schuljahr 2025/26
|
||||
{ from: "2025-12-22", to: "2026-01-05", name: "Weihnachtsferien" },
|
||||
{ from: "2026-03-30", to: "2026-04-11", name: "Osterferien" },
|
||||
{ from: "2026-05-26", to: "2026-06-05", name: "Pfingstferien" },
|
||||
{ from: "2026-07-30", to: "2026-09-12", name: "Sommerferien" },
|
||||
{ from: "2026-10-26", to: "2026-10-30", name: "Herbstferien" },
|
||||
{ from: "2026-10-31", to: "2026-10-31", name: "Reformationsfest" },
|
||||
// Schuljahr 2026/27
|
||||
{ from: "2026-12-23", to: "2027-01-09", name: "Weihnachtsferien" },
|
||||
{ from: "2027-03-25", to: "2027-03-25", name: "Gr\xFCndonnerstag" },
|
||||
{ from: "2027-03-30", to: "2027-04-03", name: "Osterferien" },
|
||||
{ from: "2027-05-18", to: "2027-05-29", name: "Pfingstferien" },
|
||||
{ from: "2027-07-29", to: "2027-09-11", name: "Sommerferien" },
|
||||
{ from: "2027-11-02", to: "2027-11-06", name: "Herbstferien" },
|
||||
// Schuljahr 2027/28
|
||||
{ from: "2027-12-23", to: "2028-01-08", name: "Weihnachtsferien" }
|
||||
];
|
||||
var BW_PUBLIC_HOLIDAYS = {
|
||||
"2026-01-01": "Neujahr",
|
||||
"2026-01-06": "Heilige Drei K\xF6nige",
|
||||
"2026-04-03": "Karfreitag",
|
||||
"2026-04-06": "Ostermontag",
|
||||
"2026-05-01": "Tag der Arbeit",
|
||||
"2026-05-14": "Christi Himmelfahrt",
|
||||
"2026-05-25": "Pfingstmontag",
|
||||
"2026-06-04": "Fronleichnam",
|
||||
"2026-10-03": "Tag der Deutschen Einheit",
|
||||
"2026-11-01": "Allerheiligen",
|
||||
"2026-12-25": "1. Weihnachtsfeiertag",
|
||||
"2026-12-26": "2. Weihnachtsfeiertag",
|
||||
"2027-01-01": "Neujahr",
|
||||
"2027-01-06": "Heilige Drei K\xF6nige",
|
||||
"2027-03-26": "Karfreitag",
|
||||
"2027-03-29": "Ostermontag",
|
||||
"2027-05-01": "Tag der Arbeit",
|
||||
"2027-05-06": "Christi Himmelfahrt",
|
||||
"2027-05-17": "Pfingstmontag",
|
||||
"2027-05-27": "Fronleichnam",
|
||||
"2027-10-03": "Tag der Deutschen Einheit",
|
||||
"2027-11-01": "Allerheiligen",
|
||||
"2027-12-25": "1. Weihnachtsfeiertag",
|
||||
"2027-12-26": "2. Weihnachtsfeiertag"
|
||||
};
|
||||
var LAST_COMPLETED_DATE = "2026-04-03";
|
||||
var START_WEEK_NUMBER = 79;
|
||||
|
||||
// src/lib/calendar.ts
|
||||
var WEEKDAYS = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
|
||||
function parseISO(iso) {
|
||||
const [y, m, d] = iso.split("-").map(Number);
|
||||
return new Date(y, m - 1, d);
|
||||
}
|
||||
function toISO(date) {
|
||||
const y = date.getFullYear();
|
||||
const m = String(date.getMonth() + 1).padStart(2, "0");
|
||||
const d = String(date.getDate()).padStart(2, "0");
|
||||
return `${y}-${m}-${d}`;
|
||||
}
|
||||
function formatDE(iso) {
|
||||
const [y, m, d] = iso.split("-");
|
||||
return `${d}.${m}.${y}`;
|
||||
}
|
||||
function addDays(iso, days) {
|
||||
const d = parseISO(iso);
|
||||
d.setDate(d.getDate() + days);
|
||||
return toISO(d);
|
||||
}
|
||||
function isWeekend(iso) {
|
||||
const wd = parseISO(iso).getDay();
|
||||
return wd === 0 || wd === 6;
|
||||
}
|
||||
function isInSchoolHoliday(iso) {
|
||||
for (const h of BW_SCHOOL_HOLIDAYS) {
|
||||
if (iso >= h.from && iso <= h.to) return h.name;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
function getPublicHoliday(iso) {
|
||||
return BW_PUBLIC_HOLIDAYS[iso];
|
||||
}
|
||||
function getDayType(iso) {
|
||||
if (getPublicHoliday(iso)) return "feiertag";
|
||||
if (isInSchoolHoliday(iso)) return "betrieb";
|
||||
const wd = parseISO(iso).getDay();
|
||||
if (wd === 2 || wd === 4) return "schule";
|
||||
return "betrieb";
|
||||
}
|
||||
function getMonday(iso) {
|
||||
const d = parseISO(iso);
|
||||
const wd = d.getDay();
|
||||
const diff = wd === 0 ? -6 : 1 - wd;
|
||||
d.setDate(d.getDate() + diff);
|
||||
return toISO(d);
|
||||
}
|
||||
function getFriday(iso) {
|
||||
return addDays(getMonday(iso), 4);
|
||||
}
|
||||
function getWeekNumber(iso) {
|
||||
const monday = getMonday(iso);
|
||||
const baseMonday = getMonday(LAST_COMPLETED_DATE);
|
||||
const baseWeek = START_WEEK_NUMBER - 1;
|
||||
const days = (parseISO(monday).getTime() - parseISO(baseMonday).getTime()) / (24 * 60 * 60 * 1e3);
|
||||
return baseWeek + Math.round(days / 7);
|
||||
}
|
||||
function getYearLabel(iso) {
|
||||
if (iso < "2025-09-01") return "Erstes Ausbildungsjahr";
|
||||
if (iso < "2026-09-01") return "Zweites Ausbildungsjahr";
|
||||
return "Drittes Ausbildungsjahr";
|
||||
}
|
||||
function getDayInfo(iso) {
|
||||
const d = parseISO(iso);
|
||||
const weekday = d.getDay();
|
||||
const holidayName = getPublicHoliday(iso);
|
||||
const schoolHolidayName = isInSchoolHoliday(iso);
|
||||
return {
|
||||
date: iso,
|
||||
weekday,
|
||||
weekdayLabel: WEEKDAYS[weekday],
|
||||
type: getDayType(iso),
|
||||
holidayName,
|
||||
schoolHolidayName,
|
||||
weekNumber: getWeekNumber(iso),
|
||||
weekMonday: getMonday(iso),
|
||||
weekFriday: getFriday(iso),
|
||||
yearLabel: getYearLabel(iso)
|
||||
};
|
||||
}
|
||||
function nextWorkday(iso) {
|
||||
let cur = addDays(iso, 1);
|
||||
while (isWeekend(cur)) cur = addDays(cur, 1);
|
||||
return cur;
|
||||
}
|
||||
function prevWorkday(iso) {
|
||||
let cur = addDays(iso, -1);
|
||||
while (isWeekend(cur)) cur = addDays(cur, -1);
|
||||
return cur;
|
||||
}
|
||||
function firstOpenDay() {
|
||||
return nextWorkday(LAST_COMPLETED_DATE);
|
||||
}
|
||||
function weekWorkdays(monday) {
|
||||
return [0, 1, 2, 3, 4].map((i) => addDays(monday, i));
|
||||
}
|
||||
function weekNeedsSchool(monday) {
|
||||
return weekWorkdays(monday).some((d) => getDayType(d) === "schule");
|
||||
}
|
||||
function feiertagActivityLine(iso) {
|
||||
const info = getDayInfo(iso);
|
||||
if (info.type !== "feiertag") return void 0;
|
||||
return `${info.weekdayLabel} Feiertag`;
|
||||
}
|
||||
function typeLabel(type) {
|
||||
if (type === "betrieb") return "Betrieb";
|
||||
if (type === "schule") return "Berufsschule";
|
||||
return "Feiertag";
|
||||
}
|
||||
export {
|
||||
addDays,
|
||||
feiertagActivityLine,
|
||||
firstOpenDay,
|
||||
formatDE,
|
||||
getDayInfo,
|
||||
getDayType,
|
||||
getFriday,
|
||||
getMonday,
|
||||
getPublicHoliday,
|
||||
getWeekNumber,
|
||||
getYearLabel,
|
||||
isInSchoolHoliday,
|
||||
isWeekend,
|
||||
nextWorkday,
|
||||
parseISO,
|
||||
prevWorkday,
|
||||
toISO,
|
||||
typeLabel,
|
||||
weekNeedsSchool,
|
||||
weekWorkdays
|
||||
};
|
||||
Reference in New Issue
Block a user