Files
pfadi-bussle/helpers/date.ts
2020-11-09 22:51:19 +01:00

75 lines
1.5 KiB
TypeScript

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)
}