Fix relative times (#39742)

This commit is contained in:
Claire
2026-07-07 10:22:54 +02:00
parent a17fb57446
commit ea05e85eee
2 changed files with 18 additions and 8 deletions

View File

@@ -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

View File

@@ -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 {