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
zio/stable
Bossett 2023-09-09 01:57:22 +10:00 committed by GitHub
parent 6d73ed96e1
commit 775aa87540
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View File

@ -175,6 +175,7 @@ describe('ago', () => {
1671461038, 1671461038,
'04 Dec 1995 00:12:00 GMT', '04 Dec 1995 00:12:00 GMT',
new Date(), new Date(),
new Date().setSeconds(new Date().getSeconds() - 10),
new Date().setMinutes(new Date().getMinutes() - 10), new Date().setMinutes(new Date().getMinutes() - 10),
new Date().setHours(new Date().getHours() - 1), new Date().setHours(new Date().getHours() - 1),
new Date().setDate(new Date().getDate() - 1), new Date().setDate(new Date().getDate() - 1),
@ -183,7 +184,8 @@ describe('ago', () => {
const outputs = [ const outputs = [
new Date(1671461038).toLocaleDateString(), new Date(1671461038).toLocaleDateString(),
new Date('04 Dec 1995 00:12:00 GMT').toLocaleDateString(), new Date('04 Dec 1995 00:12:00 GMT').toLocaleDateString(),
'0s', 'now',
'10s',
'10m', '10m',
'1h', '1h',
'1d', '1d',

View File

@ -1,3 +1,4 @@
const NOW = 5
const MINUTE = 60 const MINUTE = 60
const HOUR = MINUTE * 60 const HOUR = MINUTE * 60
const DAY = HOUR * 24 const DAY = HOUR * 24
@ -13,7 +14,9 @@ export function ago(date: number | string | Date): string {
ts = date ts = date
} }
const diffSeconds = Math.floor((Date.now() - ts) / 1e3) const diffSeconds = Math.floor((Date.now() - ts) / 1e3)
if (diffSeconds < MINUTE) { if (diffSeconds < NOW) {
return `now`
} else if (diffSeconds < MINUTE) {
return `${diffSeconds}s` return `${diffSeconds}s`
} else if (diffSeconds < HOUR) { } else if (diffSeconds < HOUR) {
return `${Math.floor(diffSeconds / MINUTE)}m` return `${Math.floor(diffSeconds / MINUTE)}m`