Add long format
This commit is contained in:
+29
-6
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user