diff --git a/app/javascript/mastodon/utils/time.test.ts b/app/javascript/mastodon/utils/time.test.ts index f1b206b4245..add0c7d3cd9 100644 --- a/app/javascript/mastodon/utils/time.test.ts +++ b/app/javascript/mastodon/utils/time.test.ts @@ -9,13 +9,15 @@ describe('relativeTimeParts', () => { // Past [-30 * SECOND, { value: -30, unit: 'second' }], - [-90 * SECOND, { value: -2, unit: 'minute' }], + [-60 * SECOND, { value: -1, unit: 'minute' }], + [-90 * SECOND, { value: -1, unit: 'minute' }], [-30 * MINUTE, { value: -30, unit: 'minute' }], - [-90 * MINUTE, { value: -2, unit: 'hour' }], + [-60 * MINUTE, { value: -1, unit: 'hour' }], + [-90 * MINUTE, { value: -1, unit: 'hour' }], [-5 * HOUR, { value: -5, unit: 'hour' }], [-24 * HOUR, { value: -1, unit: 'day' }], [-36 * HOUR, { value: -1, unit: 'day' }], - [-47 * HOUR, { value: -2, unit: 'day' }], + [-47 * HOUR, { value: -1, unit: 'day' }], [-3 * DAY, { value: -3, unit: 'day' }], // Future diff --git a/app/javascript/mastodon/utils/time.ts b/app/javascript/mastodon/utils/time.ts index c7ed115d248..c2bbdc747f7 100644 --- a/app/javascript/mastodon/utils/time.ts +++ b/app/javascript/mastodon/utils/time.ts @@ -16,21 +16,29 @@ export function relativeTimeParts( ): { value: number; unit: TimeUnit; delta: number } { const delta = ts - now; const absDelta = Math.abs(delta); + const sign = Math.sign(delta); if (absDelta < MINUTE) { - return { value: Math.floor(delta / SECOND), unit: 'second', delta }; + return { + value: sign * Math.floor(absDelta / SECOND), + unit: 'second', + delta, + }; } if (absDelta < HOUR) { - return { value: Math.floor(delta / MINUTE), unit: 'minute', delta }; + return { + value: sign * Math.floor(absDelta / MINUTE), + unit: 'minute', + delta, + }; } if (absDelta < DAY) { - return { value: Math.floor(delta / HOUR), unit: 'hour', delta }; + return { value: sign * Math.floor(absDelta / HOUR), unit: 'hour', delta }; } - // Round instead of use floor as days are big enough that the value is usually off by a few hours. - return { value: Math.round(delta / DAY), unit: 'day', delta }; + return { value: sign * Math.floor(absDelta / DAY), unit: 'day', delta }; } export function isToday(ts: number, now = Date.now()): boolean {