Files
bsky-social-app/src/lib/strings/time.ts
T
2026-05-25 21:18:43 -07:00

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