ai-chatbot/lib/flow-board/calendar-dates.ts
134 23ced0b760 feat(flow-board): add rich notes, Gantt tasks and PNG export
Add native task metadata, working-day calendar settings, dependency scheduling and rich note editing. Support complete-sheet PNG export with resolution and transparency controls, preserve XMind extensions and update browser regressions.
2026-10-06 17:38:14 +08:00

25 lines
1.0 KiB
TypeScript

export const DAY = 86_400_000;
export function dateIndex(date: string) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(date)) return NaN;
const timestamp = Date.parse(`${date}T00:00:00Z`);
return Number.isFinite(timestamp) &&
new Date(timestamp).toISOString().slice(0, 10) === date
? timestamp / DAY
: NaN;
}
export const indexDate = (index: number) =>
new Date(index * DAY).toISOString().slice(0, 10);
export const addDays = (date: string, days: number) =>
indexDate(dateIndex(date) + days);
export function timestampDate(value: unknown) {
if (typeof value !== "number" || !Number.isFinite(value)) return "";
const date = new Date(value);
if (!Number.isFinite(date.getTime())) return "";
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`;
}
export const todayDate = () => timestampDate(Date.now());
export const dateTimestamp = (date: string, end = false) =>
Number.isFinite(dateIndex(date))
? new Date(`${date}T${end ? "23:59:59.999" : "00:00:00"}`).getTime()
: null;