feat(relativeTime): add relativeYearsDe helper for historical letter dates
The correspondence timeline labels each row with its distance from today
("vor 86 Jahren"). Uses calendar-field math so the anniversary day
flips exactly — an ms-based 365.25d average misses by a day on leap
years. Invalid / future dates return "" so the caller can hide the
label rather than print "vor 0 Jahren".
Refs #305
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -9,3 +9,22 @@ export function relativeTimeDe(from: Date, now: Date = new Date()): string {
|
||||
if (minutes < 1440) return m.comment_time_hours({ count: Math.round(minutes / 60) });
|
||||
return m.comment_time_days({ count: Math.round(minutes / 1440) });
|
||||
}
|
||||
|
||||
// "vor N Jahren" for a historical letter date relative to now. Computed from
|
||||
// calendar fields (not a constant ms-per-year) so that a letter from exactly
|
||||
// one year ago reports "vor 1 Jahr" rather than falling on the wrong side of
|
||||
// a leap-year rounding. Returns "" for invalid or future dates — the caller
|
||||
// should then hide the relative-time label rather than render a misleading
|
||||
// "vor 0 Jahren".
|
||||
export function relativeYearsDe(from: Date, now: Date = new Date()): string {
|
||||
if (Number.isNaN(from.getTime()) || Number.isNaN(now.getTime())) return '';
|
||||
if (from.getTime() > now.getTime()) return '';
|
||||
let years = now.getUTCFullYear() - from.getUTCFullYear();
|
||||
const beforeAnniversary =
|
||||
now.getUTCMonth() < from.getUTCMonth() ||
|
||||
(now.getUTCMonth() === from.getUTCMonth() && now.getUTCDate() < from.getUTCDate());
|
||||
if (beforeAnniversary) years -= 1;
|
||||
if (years < 1) return 'vor weniger als 1 Jahr';
|
||||
if (years === 1) return 'vor 1 Jahr';
|
||||
return `vor ${years} Jahren`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user