diff options
author | Hailey <me@haileyok.com> | 2024-05-13 08:39:34 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-13 08:39:34 -0700 |
commit | 5cd4ac3a34f629945ccb86e451fbf20dd06e6863 (patch) | |
tree | af281b0a6b439c6b8bf666b7586ed349353f0ce9 /src | |
parent | 73d094c67e53506fd3c4ab2c29b37ab481cd9331 (diff) | |
download | voidsky-5cd4ac3a34f629945ccb86e451fbf20dd06e6863.tar.zst |
get a little more accurate with month length (#3981)
* get a little more accurate with month length * create some wiggle room, create some specific tests * update more tests
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/strings/time.ts | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/lib/strings/time.ts b/src/lib/strings/time.ts index 3e162af1a..8de4b52ae 100644 --- a/src/lib/strings/time.ts +++ b/src/lib/strings/time.ts @@ -2,8 +2,8 @@ const NOW = 5 const MINUTE = 60 const HOUR = MINUTE * 60 const DAY = HOUR * 24 -const MONTH = DAY * 28 -const YEAR = DAY * 365 +const MONTH_30 = DAY * 30 +const MONTH = DAY * 30.41675 // This results in 365.001 days in a year, which is close enough for nearly all cases export function ago(date: number | string | Date): string { let ts: number if (typeof date === 'string') { @@ -22,12 +22,21 @@ export function ago(date: number | string | Date): string { return `${Math.floor(diffSeconds / MINUTE)}m` } else if (diffSeconds < DAY) { return `${Math.floor(diffSeconds / HOUR)}h` - } else if (diffSeconds < MONTH) { + } else if (diffSeconds < MONTH_30) { return `${Math.round(diffSeconds / DAY)}d` - } else if (diffSeconds < YEAR) { - return `${Math.floor(diffSeconds / MONTH)}mo` } else { - return new Date(ts).toLocaleDateString() + let months = diffSeconds / MONTH + if (months % 1 >= 0.9) { + months = Math.ceil(months) + } else { + months = Math.floor(months) + } + + if (months < 12) { + return `${months}mo` + } else { + return new Date(ts).toLocaleDateString() + } } } |