Add long format

This commit is contained in:
Eric Bailey
2024-06-18 09:24:04 -05:00
parent 8b436be50f
commit 58adc0ef08
+29 -6
View File
@@ -1,3 +1,4 @@
import {plural} from '@lingui/macro'
import {differenceInSeconds} from 'date-fns' import {differenceInSeconds} from 'date-fns'
export function ago(date: number | string | Date): string { export function ago(date: number | string | Date): string {
@@ -18,24 +19,46 @@ const MONTH_30 = DAY * 30
export function dateDiff( export function dateDiff(
earlier: number | string | Date, earlier: number | string | Date,
later: number | string | Date, later: number | string | Date,
options?: {
format?: 'long' | 'short'
},
): string { ): string {
const format = options?.format || 'short'
const long = format === 'long'
const diffSeconds = differenceInSeconds(new Date(later), new Date(earlier)) const diffSeconds = differenceInSeconds(new Date(later), new Date(earlier))
if (diffSeconds < NOW) { if (diffSeconds < NOW) {
return `now` return `now`
} else if (diffSeconds < MINUTE) { } else if (diffSeconds < MINUTE) {
return `${diffSeconds}s` return `${diffSeconds}${
long ? ` ${plural(diffSeconds, {one: 'second', other: 'seconds'})}` : 's'
}`
} else if (diffSeconds < HOUR) { } else if (diffSeconds < HOUR) {
return `${Math.floor(diffSeconds / MINUTE)}m` const diff = Math.floor(diffSeconds / MINUTE)
return `${diff}${
long ? ` ${plural(diff, {one: 'minute', other: 'minutes'})}` : 'm'
}`
} else if (diffSeconds < DAY) { } else if (diffSeconds < DAY) {
return `${Math.floor(diffSeconds / HOUR)}h` const diff = Math.floor(diffSeconds / HOUR)
return `${diff}${
long ? ` ${plural(diff, {one: 'hour', other: 'hours'})}` : 'h'
}`
} else if (diffSeconds < MONTH_30) { } else if (diffSeconds < MONTH_30) {
return `${Math.floor(diffSeconds / DAY)}d` const diff = Math.floor(diffSeconds / DAY)
return `${diff}${
long ? ` ${plural(diff, {one: 'day', other: 'days'})}` : 'd'
}`
} else { } else {
const diffMonths30 = Math.floor(diffSeconds / MONTH_30) const diffMonths30 = Math.floor(diffSeconds / MONTH_30)
if (diffMonths30 < 12) { if (diffMonths30 < 12) {
return `${diffMonths30}mo` return `${diffMonths30}${long ? ' months' : 'mo'}`
} else { } else {
return new Date(earlier).toLocaleDateString() const str = new Date(earlier).toLocaleDateString()
if (long) {
return `on ${str}`
}
return str
} }
} }
} }