Relative Time Formatter
How it works
The gap between "From" and "To", in seconds, decides both the unit (seconds through years)
and the number shown — the largest unit that keeps the number under roughly 1 in the next
unit up. That value and unit are then handed to the browser's own
Intl.RelativeTimeFormat, which supplies the actual English wording, including
the special "tomorrow" / "next week" phrasing English uses right at ±1 day, week, month or
year.
Frequently asked questions
Why does "1 day" become "tomorrow" instead of "in 1 day"?
That wording comes straight from the JavaScript engine's built-in `Intl.RelativeTimeFormat`, not a special case in this tool. With `numeric: 'auto'`, English gets the more natural "tomorrow" / "yesterday" and "next week" / "last week" phrasing exactly at ±1 day, week, month or year — every other value and unit (seconds, minutes, hours, or ±2 and up) stays fully numeric, like "3 hours ago" or "in 2 days".
Which unit gets picked for a given gap?
The largest one that still reads naturally: seconds under a minute, minutes under an hour, hours under a day, days under a week, weeks under about a month (30.44 days), months under about a year (365.25 days), and years beyond that. A month and a year have no single fixed length, so this uses the standard average Gregorian figures rather than the length of the specific months or years actually spanned.
Does this account for my timezone?
Both date/time fields are read in your browser's own local timezone, and the gap between them is the same regardless of timezone — 3 hours is 3 hours no matter where either clock is set. There is nothing to convert here the way there is for a single absolute timestamp.