numcal

Help

numcal accepts natural-language questions about dates and times. Type anything below. The eight chip groups on the home page are starting points, not limits.

What you can ask

Differences

How far apart are two dates, optionally in a specific unit.

  • days between today and christmas
  • weeks between Jan 1 and Dec 31
  • business days between Jun 1 and Jul 1
  • between 2024-01-01 and 2026-05-12

Offsets: add or subtract

Move forward or backward from an anchor date.

  • 2026-01-01 + 90 days
  • 30 days after Jun 1
  • 30 business days after Jun 1
  • add 6 weeks to today
  • subtract 90 days from Jun 1
  • 3 weeks ago · in 3 weeks · 3 weeks from now

Age

Calendar age in years, months, and days, plus total days. Or convert to any unit.

  • age of 1990-06-15
  • how old am I born June 15 1990
  • age of 1990-06-15 on 2050-01-01
  • how old am I in days born 1990-06-15
  • age of 1990-06-15 in seconds (ticks live)

Weekday

  • weekday of 2026-07-04
  • what day is christmas

Week number

ISO 8601 week number by default. Useful for sprint numbering, payroll cycles, EU calendars.

  • week number of today
  • what week is 2026-12-25

Countdown / time since

Live-updating pages for any future or past date.

  • days until christmas
  • weeks until new year
  • time since 2020-03-11
  • until my wedding 2027-09-12 (the label persists in the URL)

Time zone conversion

DST-aware. Use city names or IANA zones; PT/ET/IST are DST-aware; PST/EST are fixed offsets.

  • 5pm Tokyo in NYC
  • 3pm PT to IST
  • 14:30 Berlin in San Francisco

Duration arithmetic

Pure time arithmetic: adding and subtracting durations, independent of any date.

  • 3:45 + 2:30
  • 1:30:00 - 0:45:00
  • 2h30m + 1h45m
  • 2 hours 30 minutes + 1 hour 45 minutes

Sub-hour offsets

Minutes and seconds from now. Same family as the hour offsets.

  • 90 minutes ago
  • in 30 seconds
  • 5 minutes from now in Dublin

Holiday lookup

"When is …" resolves recognized holidays. Country-aware via locale, override with "in <country>".

  • when is easter
  • when is easter 2027
  • when is thanksgiving
  • when was easter 1999

Is today a holiday

Quick check against the bundled holiday calendars (15 countries).

  • is today a holiday
  • is 2026-07-04 a holiday in US
  • is christmas a holiday in UK

Milestone date

Project forward from a birth date by any age or count.

  • when will I be 10000 days old born 1990-06-15
  • when will I turn 18 born 2010-01-01
  • when will I be 1000000 minutes old born 1990-06-15

Day of year

Where in the year does a date fall? Or which date is the Nth?

  • what day of the year is today
  • day 200 of 2026
  • julian day of christmas

Pregnancy due date

LMP + 280 days (Naegele's rule), plus the current gestational age. Arithmetic only, not medical advice.

  • due date if LMP was 2026-01-12
  • pregnancy due date from Jan 12

Recurrence / series

Generates a list of dates from a rule. Returns up to N occurrences.

  • every Tuesday for 12 weeks
  • every other Friday from Jan 1 for 20 occurrences
  • first Monday of each month in 2026
  • last Friday of each month in 2027

Moon phase

Phase name and illumination for any date. Synodic-month approximation, accurate to within a few hours.

  • moon phase today
  • moon phase on 2026-07-04

Other calendar systems

Project a Gregorian date through any of the calendar systems the ICU bundle supports: Hebrew, Islamic (Hijri), Persian, Indian National, Chinese, Japanese era, Buddhist (Thai), Korean, Coptic, Ethiopian, Republic of China.

  • today in hebrew
  • 2026-07-04 in islamic
  • christmas in buddhist
  • persian date today
  • 2026-07-04 in all calendars
  • calendar systems for today

Accepted system names: hebrew/jewish, islamic/hijri (Umm al-Qura), islamic civil (tabular), persian/jalali, indian/saka, chinese, japanese/reiwa, buddhist/thai, korean/dangi, roc/taiwan, coptic, ethiopian, ethioaa, gregorian. Display direction only. Reverse parsing (Hijri or Hebrew → Gregorian) is a follow-up.

Current time in a city

Reads the live wall-clock in the named city and ticks every second.

  • what time is it in Beijing
  • time in Tokyo
  • current time in NYC
  • what's the time in London

Date and time formats

Dates can be written several ways. Pick whatever feels natural. If you're sharing a link with someone in another country, use a locale-prefixed page so the numeric date format isn't ambiguous on their end:

FormExampleNotes
ISO2026-12-25Unambiguous; preferred internally.
Numeric12/25/2026Interpreted by your browser locale. US is MM/DD, UK is DD/MM. The result card shows which.
Written month-dayDec 25, 2026Or December 25 2026, or with ordinals: Dec 25th.
Day-month25 December 2026The other natural order.
Year only2026Resolves to Jan 1.
Month + yearJune 2026Resolves to the 1st.
QuarterQ2 2026Resolves to the quarter start.
Relativetoday · tomorrow · yesterday · next friday · last tuesday · this wednesday"next" is always the next one, never today, even on the same weekday.
Namedchristmas · new year · halloween · christmas 2024Without a year, resolves to the next occurrence.
Period anchorsend of month · start of quarter · end of yearAnchored to today.

Number words

Numbers can be written as words from zero to ninety-nine, including compounds: six business days after Jun 1, twenty-five years ago, forty two days from today. a and an before a unit count as 1: a week ago.

The three rules

  1. Order doesn't matter for differences. If you write between Dec 31 and Jan 1, the dates are silently reordered and the assumption row tells you so.
  2. Countdowns are future-only; ages are past-only. Type until yesterday and you'll see a suggestion to use time since instead. Type age born tomorrow and you'll see a suggestion for days between.
  3. Labels in countdowns are preserved. Type until my wedding 2027-09-12 and the URL becomes numcal.com/until?d=2027-09-12&label=my-wedding.

Why your answer is accurate

Every result shows its assumptions at the bottom of the card: calendar system, locale, working week, holidays applied, DST handling, year inference. If a date format is ambiguous, numcal picks a default and shows what it picked. You can screenshot a result and defend the number to a colleague.

How a query becomes a result

Each query goes through four passes. First, the text is normalized: lowercased, smart-quotes mapped to ASCII, twenty-five turned into 25, till into until. Second, an intent classifier matches the normalized text against a priority list of patterns — countdown, age, difference, weekday, time zone, and so on — and picks one. Third, an extractor for that intent reads out the dates, times, counts, and cities it needs. Fourth, the evaluator runs the math and produces the answer card with its assumption row.

Two consequences of this design. The same query, asked on the same day, returns the same answer down to the byte — no probabilities, no variation. And when a query doesn't match any pattern, numcal can be honest about it and suggest a near-match from the chip set instead of guessing.

Computed, not generated

No part of numcal calls a language model. There's no chatbot in the back of the calculator. The parser is a few hundred lines of pattern-matching TypeScript, and the math runs on the calendar primitives your browser already ships: Date, Intl.DateTimeFormat, and the ICU calendar systems for the non-Gregorian views. The whole answer pipeline runs in your browser; numcal's server doesn't see queries that parse successfully.

The practical upshot is that a numcal answer is defensible the way a hand-checked calendar calculation is defensible. There's no probability that someone else doing the same math gets a different number.

Privacy

numcal doesn't create accounts, doesn't drop cookies, and doesn't load third-party trackers. Pageview counts go to a self-hosted analytics instance (GoatCounter) which counts each visit without setting a cookie and without storing your IP. That is the entire telemetry stack.

One narrow exception: queries that don't parse are sent to a log endpoint so the parser can be improved on real misses rather than imagined ones. Stored: the text you typed, a timestamp, and a truncated User-Agent string for bot filtering. Not stored: your IP, any identifier, anything that ties one logged query to another. Each row is deleted automatically after 90 days. Queries that parse successfully aren't logged at all.

What numcal doesn't do (yet)