Add weekDateRange helper for flight schedule note

This commit is contained in:
2026-04-17 02:02:48 +03:00
parent 859886def8
commit 4308a91dc8
2 changed files with 50 additions and 0 deletions
@@ -0,0 +1,31 @@
import { describe, it, expect } from "vitest";
import { getWeekDateRange } from "./weekDateRange.js";
describe("getWeekDateRange", () => {
it("returns Monday/Sunday for a mid-week date", () => {
// 2026-04-15 is a Wednesday
const result = getWeekDateRange("2026-04-15T10:00:00");
expect(result.start).toBe("13.04.2026");
expect(result.end).toBe("19.04.2026");
});
it("returns Monday/Sunday for a Sunday input", () => {
const result = getWeekDateRange("2026-04-19T10:00:00");
expect(result.start).toBe("13.04.2026");
expect(result.end).toBe("19.04.2026");
});
it("returns Monday/Sunday for a Monday input", () => {
const result = getWeekDateRange("2026-04-13T10:00:00");
expect(result.start).toBe("13.04.2026");
expect(result.end).toBe("19.04.2026");
});
it("returns empty strings for invalid input", () => {
expect(getWeekDateRange("not-a-date")).toEqual({ start: "", end: "" });
});
it("returns empty strings for undefined input", () => {
expect(getWeekDateRange(undefined)).toEqual({ start: "", end: "" });
});
});
@@ -0,0 +1,19 @@
import { parseISO, startOfISOWeek, endOfISOWeek, format, isValid } from "date-fns";
/**
* Given a scheduled local-time ISO string, return the ISO-week bounds
* (Monday/Sunday) as `dd.MM.yyyy` formatted strings.
* Returns `{ start: "", end: "" }` for invalid or missing input.
*/
export function getWeekDateRange(scheduledLocal: string | undefined): {
start: string;
end: string;
} {
if (!scheduledLocal) return { start: "", end: "" };
const d = parseISO(scheduledLocal);
if (!isValid(d)) return { start: "", end: "" };
return {
start: format(startOfISOWeek(d), "dd.MM.yyyy"),
end: format(endOfISOWeek(d), "dd.MM.yyyy"),
};
}