70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
// Helpers for parsing backend datetimes and computing week grids.
|
|
|
|
// Backend stores start_time / end_time as strings like "2026-08-10 19:00"
|
|
// (sometimes ISO "2026-08-10T19:00"). Parse both robustly as local time.
|
|
export function parseDateTime(value: string): Date {
|
|
if (!value) return new Date(NaN)
|
|
const normalized = value.trim().replace(" ", "T")
|
|
const d = new Date(normalized)
|
|
return d
|
|
}
|
|
|
|
export function startOfWeek(date: Date): Date {
|
|
const d = new Date(date)
|
|
d.setHours(0, 0, 0, 0)
|
|
const day = d.getDay() // 0 = Sunday
|
|
d.setDate(d.getDate() - day)
|
|
return d
|
|
}
|
|
|
|
export function addDays(date: Date, days: number): Date {
|
|
const d = new Date(date)
|
|
d.setDate(d.getDate() + days)
|
|
return d
|
|
}
|
|
|
|
export function isSameDay(a: Date, b: Date): boolean {
|
|
return (
|
|
a.getFullYear() === b.getFullYear() &&
|
|
a.getMonth() === b.getMonth() &&
|
|
a.getDate() === b.getDate()
|
|
)
|
|
}
|
|
|
|
export function toDateParam(date: Date): string {
|
|
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}`
|
|
}
|
|
|
|
// Format a Date into the "YYYY-MM-DD HH:MM" string the backend expects.
|
|
export function toBackendDateTime(date: Date): string {
|
|
const y = date.getFullYear()
|
|
const mo = String(date.getMonth() + 1).padStart(2, "0")
|
|
const d = String(date.getDate()).padStart(2, "0")
|
|
const h = String(date.getHours()).padStart(2, "0")
|
|
const mi = String(date.getMinutes()).padStart(2, "0")
|
|
return `${y}-${mo}-${d} ${h}:${mi}`
|
|
}
|
|
|
|
// For <input type="datetime-local"> values ("YYYY-MM-DDTHH:MM").
|
|
export function toInputDateTime(date: Date): string {
|
|
return toBackendDateTime(date).replace(" ", "T")
|
|
}
|
|
|
|
export function formatTime(date: Date): string {
|
|
if (isNaN(date.getTime())) return "--:--"
|
|
return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", hour12: false })
|
|
}
|
|
|
|
export function formatDayLabel(date: Date): string {
|
|
return date.toLocaleDateString([], { weekday: "long", month: "long", day: "numeric" })
|
|
}
|
|
|
|
export function formatMonthYear(date: Date): string {
|
|
return date.toLocaleDateString([], { month: "long", year: "numeric" })
|
|
}
|
|
|
|
export const WEEKDAY_LABELS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
|