59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import {type I18n} from '@lingui/core'
|
|
import {msg} from '@lingui/core/macro'
|
|
|
|
export function niceDate(
|
|
i18n: I18n,
|
|
date: number | string | Date,
|
|
dateStyle: 'short' | 'medium' | 'long' | 'full' | 'dot separated' = 'long',
|
|
timeStyle: 'short' | 'medium' | 'long' | 'full' | 'none' = 'short',
|
|
) {
|
|
const ts = timeStyle === 'none' ? undefined : timeStyle
|
|
const d = new Date(date)
|
|
|
|
if (dateStyle === 'dot separated') {
|
|
return i18n._(
|
|
msg({
|
|
context: 'date and time formatted like this: [time] · [date]',
|
|
message: `${i18n.date(d, {timeStyle: ts})} · ${i18n.date(d, {dateStyle: 'medium'})}`,
|
|
}),
|
|
)
|
|
}
|
|
|
|
return i18n.date(d, {
|
|
dateStyle,
|
|
timeStyle: ts,
|
|
})
|
|
}
|
|
|
|
export function getAge(birthDate: Date): number {
|
|
var today = new Date()
|
|
var age = today.getFullYear() - birthDate.getFullYear()
|
|
var m = today.getMonth() - birthDate.getMonth()
|
|
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
|
|
age--
|
|
}
|
|
return age
|
|
}
|
|
|
|
/**
|
|
* Get a Date object that is N years ago from now
|
|
* @param years number of years
|
|
* @returns Date object
|
|
*/
|
|
export function getDateAgo(years: number): Date {
|
|
const date = new Date()
|
|
date.setFullYear(date.getFullYear() - years)
|
|
return date
|
|
}
|
|
|
|
/**
|
|
* Compares two dates by year, month, and day only
|
|
*/
|
|
export function simpleAreDatesEqual(a: Date, b: Date): boolean {
|
|
return (
|
|
a.getFullYear() === b.getFullYear() &&
|
|
a.getMonth() === b.getMonth() &&
|
|
a.getDate() === b.getDate()
|
|
)
|
|
}
|