Age in Hours Calculator
Hours give the largest, most vivid number of the common age units, and they are the point at which the arithmetic stops being straightforward — because unlike days and weeks, hours interact with time zones and daylight saving.
The Scale
| Age | Hours (approximate) |
|---|---|
| 1 year | 8,766 |
| 10 years | 87,660 |
| 18 years | 157,788 |
| 30 years | 262,980 |
| 50 years | 438,300 |
| 80 years | 701,280 |
Where the Hours Go
Applying population averages to a life of roughly 700,000 hours:
| Activity | Share | Hours in 80 years |
|---|---|---|
| Sleep | ~33% | ~233,000 |
| Work (over a career) | ~11% | ~80,000 |
| Eating | ~5% | ~35,000 |
| Commuting | ~2% | ~14,000 |
Not Every Day Has 24 Hours
Two days a year do not, in any region observing daylight saving: one has 23 hours and one has 25. Over 80 years that is roughly 80 hours of drift if you multiply days by 24 — small, and enough to make two calculators disagree.
This calculator counts calendar days and multiplies, which gives a consistent answer independent of which time zone's transitions you lived through.
Leap Seconds
Since 1972, 27 leap seconds have been inserted into UTC to keep atomic time aligned with the Earth's rotation. They are real and universally ignored in age arithmetic — no calendar library accounts for them, and at 27 seconds across a lifetime nothing would change if it did.
The Traps in Date Arithmetic
Months are not 30 days. Adding one month to 31 January has no correct answer, and every library picks differently — 28 February, 2 March or an error. Decide which your business needs before the edge case decides for you.
Days are not always 86,400 seconds. Daylight saving makes one day 23 hours and another
25. Adding n * 86400000 milliseconds drifts by an hour twice a year, which is enough to
move a date across midnight and return an answer one day out.
``javascript
// Correct — the Date object normalises overflow and handles DST
const addDays = (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
// Correct — calendar days, unaffected by DST or time of day
const daysBetween = (a, b) => {
const utc = (d) => Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
return Math.round((utc(b) - utc(a)) / 86400000);
};
`
Months are zero-indexed in JavaScript. new Date(2026, 0, 1) is January. new
Date(2026, 12, 1) is January 2027, silently.
Parsing is not portable. new Date("2026-08-30") is parsed as UTC, while
new Date("2026/08/30")` is parsed as local — the same calendar date, a day apart in some
zones. Always parse ISO 8601, and construct with explicit components when the time matters.
Time Zones Decide the Answer
| Question | Depends on |
|---|---|
| How many days until an event? | The viewer's zone |
| Is this subscription expired? | UTC, always |
| What day of the week was this? | The zone the event happened in |
| When does "tomorrow" start? | The viewer's zone |
Reference Points
| Interval | Days |
|---|---|
| Week | 7 |
| Month (average Gregorian) | 30.44 |
| Quarter | 91.31 |
| Year | 365.2425 |
| Leap year | 366 |