Solar Calendar
A calendar of 13 identical 28-day months, with each year starting on the first Monday on or after the spring equinox.
The Solar Calendar has 13 months of exactly 28 days, so the 1st is always a Monday and the 28th always a Sunday. The year starts on the first Monday on or after the March equinox, so it stays with the seasons, and the ordinary date is shown next to every day. It’s for people who are curious about calendars, and for anyone who wants to print a year or follow one in their own calendar app.
How the calendar works
13 months of 28 days make 364 days. About one year in six, the next first Monday after the equinox is 371 days away, and the extra seven days form a leap week at the end of the year.
The equinox is calculated with Jean Meeus’s algorithm from Astronomical Algorithms, accurate to about a minute. The year starts on the equinox’s date in UTC, so the calendar is the same everywhere. Solar 2026 runs from Monday 23 March 2026 to Sunday 21 March 2027.
What it does
- Opens on today, with the date in both calendars and how long until the next equinox or solstice.
- A month view where the numbers 1 to 28 never move, with equinoxes, solstices and new and full moons marked, and a year view with every day in one table. Either prints on one A4 page.
- Twelve sets of month names, from Bede’s Anglo-Saxon months, Old Norse, Roman, Persian and Coptic to invented sets such as Nature and Sky, each with its meaning. Names that aren’t English have a pronunciation and a button that reads them aloud.
- Festivals from each set of names, such as Nowruz, and public holidays for the UK, Ireland and the US. A weekly check keeps the holidays in step with GOV.UK, the US Office of Personnel Management and Nager.Date.
- Sunrise, sunset and day length for your location, in its own time zone. The location stays in your browser.
- Add to calendar: a subscription feed for Google Calendar, Apple Calendar or Outlook that stays up to date, or a year to download as an .ics file.
- Works offline after the first visit, and installs as an app. No cookies or accounts.
How it’s built
The app is TypeScript and Vite, with no UI framework. It replaces a 2025 version that had two near-copied pages, a PHP port that disagreed with the JavaScript, and equinox dates from a JSON file that was wrong in about a third of years.
All date logic lives in one small core with no DOM. Every date is an integer day number, never a JavaScript Date, so time zones and clock changes can’t move a day. The tests cross-check the equinoxes against astronomy-engine, which also supplies moon phases and sunrise, loaded only when needed.
The site runs on Cloudflare Workers as static files, with a strict Content Security Policy, so there are no inline scripts or styles. A small Worker builds the calendar feed and the badge on request from the same TypeScript core, so they never go stale. Vitest covers the date core, every name pack and the fonts’ coverage of every letter, and Playwright with axe covers the app in the browser. GitHub Actions runs them on every push.
How to use it
Open solar.dealmobile.co.uk. To run it yourself:
npm install
npm run dev
To add a set of month names, add one JSON file to src/names/packs/. The app finds it automatically, and the tests check it.