From 775aa875404898ad727960b28c6b271a5a381864 Mon Sep 17 00:00:00 2001 From: Bossett Date: Sat, 9 Sep 2023 01:57:22 +1000 Subject: [PATCH] Update time.ts to handle very small or negative time differences (#1390) * Update time.ts to handle very small or negative time differences Right now, posts can appear to be from the future with a negative time difference (i.e. -3s appears). This change defines 'NOW' as less than 5 seconds old, and returns 'now' in that case. It's not clear how localisation is handled - this may need translation. * Add test for 'now' in time/ago(...) Add tests for ago() for right now (i.e. 'now') and 10s ago to ensure the seconds case is still tested --- __tests__/lib/string.test.ts | 4 +++- src/lib/strings/time.ts | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/__tests__/lib/string.test.ts b/__tests__/lib/string.test.ts index 726c9be9..63bd785e 100644 --- a/__tests__/lib/string.test.ts +++ b/__tests__/lib/string.test.ts @@ -175,6 +175,7 @@ describe('ago', () => { 1671461038, '04 Dec 1995 00:12:00 GMT', new Date(), + new Date().setSeconds(new Date().getSeconds() - 10), new Date().setMinutes(new Date().getMinutes() - 10), new Date().setHours(new Date().getHours() - 1), new Date().setDate(new Date().getDate() - 1), @@ -183,7 +184,8 @@ describe('ago', () => { const outputs = [ new Date(1671461038).toLocaleDateString(), new Date('04 Dec 1995 00:12:00 GMT').toLocaleDateString(), - '0s', + 'now', + '10s', '10m', '1h', '1d', diff --git a/src/lib/strings/time.ts b/src/lib/strings/time.ts index 588b8445..05a60e94 100644 --- a/src/lib/strings/time.ts +++ b/src/lib/strings/time.ts @@ -1,3 +1,4 @@ +const NOW = 5 const MINUTE = 60 const HOUR = MINUTE * 60 const DAY = HOUR * 24 @@ -13,7 +14,9 @@ export function ago(date: number | string | Date): string { ts = date } const diffSeconds = Math.floor((Date.now() - ts) / 1e3) - if (diffSeconds < MINUTE) { + if (diffSeconds < NOW) { + return `now` + } else if (diffSeconds < MINUTE) { return `${diffSeconds}s` } else if (diffSeconds < HOUR) { return `${Math.floor(diffSeconds / MINUTE)}m`