Files
chrono/src/utils/format.ts
T
Sebastian df531908f3 refactor: code clean up
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
2026-07-06 21:09:07 -04:00

62 lines
1.9 KiB
TypeScript

// Human-readable date/time formatting shared across chrono components
export function formatTime(date: Date): string {
return date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })
}
export function formatEpochTime(timestamp: number): string {
return formatTime(new Date(timestamp))
}
export function formatHour(hour: number): string {
const ampm = hour >= 12 ? 'PM' : 'AM'
const displayHour = hour % 12 || 12
return `${displayHour} ${ampm}`
}
export function formatWeekDay(date: Date): string {
return date.toLocaleDateString('en-US', { weekday: 'short' })
}
export function formatFullDate(date: Date | string): string {
const value = date instanceof Date ? date : new Date(date)
return value.toLocaleDateString('en-US', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
})
}
// Local-time YYYY-MM-DD, for date input values
export function formatLocalIsoDate(date: Date): string {
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
// Local-time HH:MM, for time input values
export function formatLocalIsoTime(date: Date): string {
return date.toTimeString().slice(0, 5)
}
// "Jul 6, 2026" from a YYYY-MM-DD (or ISO) string
export function formatDisplayDate(value: string | null | undefined): string {
if (!value) return ''
return new Date(`${value.slice(0, 10)}T00:00:00`).toLocaleDateString(undefined, {
year: 'numeric',
month: 'short',
day: 'numeric',
})
}
// "1:05 PM" from an HH:MM string
export function formatDisplayTime(value: string | null | undefined): string {
if (!value) return ''
const [hour, minute] = value.split(':').map(Number)
const date = new Date()
date.setHours(hour, minute, 0, 0)
return date.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })
}