import { parse, format, addDays } from 'date-fns' import { utcToZonedTime } from 'date-fns-tz' const FRONTEND_FORMAT = 'dd.MM.yyyy' const BACKEND_FORMAT = 'yyyy-MM-dd' export function daysFormatFrontend(days: string[]) { if (days.length === 0) { return '' } if (days.length === 1) { return dateFormatFrontend(new Date(days[0])) } return [days[0], days.slice(-1)] .map((day: string) => dateFormatFrontend(new Date(day))) .join('-') } export function getDays({ startDate, endDate, }: { startDate: Date endDate: Date }) { let currentDay = new Date(startDate.getTime()) const days = [dateFormatBackend(currentDay)] if (!endDate) { return days } while (currentDay < endDate) { currentDay = addDays(currentDay, 1) days.push(dateFormatBackend(currentDay)) } return days } function dateFormat(date: Date, formatString: string) { if (!date) { return null } return format(date, formatString) } export function dateFormatBackend(date: Date) { return dateFormat(date, BACKEND_FORMAT) } export function dateFormatFrontend(date: Date) { return dateFormat(date, FRONTEND_FORMAT) } function dateParse(input: string, formatString: string) { const date = parse(input, formatString, new Date()) if (date.getTime() !== NaN) { return date } return null } export function dateParseFrontend(input: string) { return dateParse(input, FRONTEND_FORMAT) } export function nowInTz(timezone = 'Europe/Berlin') { const now = new Date() return utcToZonedTime(now, timezone) }