Creating Calendars
This page covers everything you need to build a calendar in MythTapestry — from a simple twelve-month structure to a fully original time system with custom eras, irregular months, and world-specific date formats.
Core concepts
Section titled “Core concepts”Temporal scales
Section titled “Temporal scales”A calendar is built from temporal scales — the named levels of your timekeeping system. Year, Month, Day, Season, and Week are all examples of temporal scales. You define as many as your world needs, and each one has a type that controls how it behaves.
| Scale type | Purpose | Examples |
|---|---|---|
| Hierarchical | Nested time divisions, from large to small | Year → Month → Day; Age → Cycle → Beat |
| Overlay | A repeating cycle that runs across the hierarchy | A 7-day week; a moon phase cycle; a market cycle |
| Subdivision | Time within a single day | Hour, Minute, Second; Bell, Quarter; Watch, Glass |
Hierarchical scales
Section titled “Hierarchical scales”Hierarchical scales form the backbone of your calendar. They nest from large to small — a Year contains Months, which contain Days. You build this structure by linking each scale to its parent. The largest scale (Year, Era, or whatever you call it) sits at the root and has no parent.
At each level, you can define named units — the individual entries within that scale. The Month scale might have 12 named units: January through December, each with its own length in days. Scales without named units, like Year, simply count forward as numbers.
Overlay scales
Section titled “Overlay scales”Overlay scales repeat on their own cycle, independent of the months and years around them. A seven-day week is a good example: it rolls forward without caring where month boundaries fall. To define an overlay, you need three things:
- Cycle length — how many units in one complete cycle (e.g. 7 for a week)
- Cycle base unit — what the cycle counts in (days, for most cases)
- Anchor point — a specific day and which overlay unit it falls on (e.g. “the first day of Year 1 is a Monday”)
The anchor tells MythTapestry where the cycle begins on your calendar. Without it, the overlay has no fixed starting point.
A cycle does not have to count in days. An Olympiad that comes round every fourth year counts in years; a season that turns every third month counts in months. Pick the scale the cycle actually moves with, and the cycle follows the real calendar underneath it: four years that take in a leap day run to 1461 days, not 1460.
Where the base unit varies in length, the cycle uses a typical length for it rather than an exact one. Months of 28 to 31 days count as a month of 30, so a three-month cycle drifts gently against the months themselves over a long span. Cycles counting in days or years are exact; if a cycle must land on a particular month every time, a recurring pattern tied to that month will hold it there where an overlay will not.
Subdivision scales
Section titled “Subdivision scales”Subdivision scales break a day into smaller units: hours, minutes, seconds, or their equivalents in your world. They work inside a single day, separate from the date structure. See Time & Subdivisions for the full guide.
Temporal units
Section titled “Temporal units”Each hierarchical or overlay scale can contain units — the named entries within it.
| Property | Description |
|---|---|
| Name | The full label for this unit (e.g. “January”, “Monday”, “First Quarter”) |
| Abbreviation | A short form for compact display (e.g. “Jan”, “Mon”) |
| Ordinal | The unit’s position within the scale, counting from zero |
| Unit length | How many days this unit spans (for day-level hierarchical units) |
| Is variable | Check this if intercalation rules can change this unit’s length (e.g. February) |
Units without a name are displayed as numbers: “Month 3”, “Day 45”. Named units appear as their name in formatted output.
Name your units however your world names them. A month called Mythara’s Bloom, Frost-Wane or Ærin Tide can be typed into a date field exactly as it is shown, in upper or lower case, so Mythara's Bloom 5, Year 312 reads back as the date it displays. The first word of a name finds it too, so Mythara 5, Year 312 lands on the same day.
Intercalation rules
Section titled “Intercalation rules”Intercalation handles irregular adjustments to your calendar — extra days inserted periodically to keep it aligned. Leap years are the most familiar example.
Each intercalation rule has:
| Property | Description |
|---|---|
| Every N cycles | How often the rule fires (e.g. every 4 years) |
| Except every M cycles | Skip the rule at this interval (e.g. except every 100 years) |
| Re-include every P cycles | Override the exception (e.g. apply again every 400 years) |
| Targets | What changes when the rule fires |
Each rule applies one or more targets:
| Target type | What it does | Example |
|---|---|---|
| Extend unit | Add days to an existing variable-length unit | Add 1 day to February |
| Insert period | Insert a standalone period at a fixed position | Insert “Epagomenal Days” after day 360 |
Example — Gregorian leap year:
Every 4 years → extend February by +1 day Except every 100 years → skip it Except-except every 400 years → apply it anywayThis produces the familiar 365/365/365/366 pattern, with century years non-leap except those divisible by 400.
When the exception does something of its own
Section titled “When the exception does something of its own”A rule with an exception has two kinds of cycle, and each can make its own changes. Most exceptions simply skip the rule — a Gregorian century year is an ordinary year, and that needs nothing further. But an exception can do something instead of nothing: the years the rule skips might take two days somewhere else entirely, in a calendar where the reckoning shifts on the longer count.
When you add a target to a rule that has an exception, you are asked which cycles it belongs to: the usual ones, or the exceptions. Targets on the usual cycles fire every time the rule catches a cycle and the exception does not; targets on the exceptions fire only on the cycles the exception catches. A rule can carry both, and they never fire together.
Say where the exception’s days go, not just how many there are. A rule that adds days on its exception cycles without naming a unit for them leaves those days with nowhere to sit, and they end up running past the end of the last unit of the cycle — you will see dates like “December 32”, which is not a date your calendar has. Older calendars written before this setting existed still behave that way; opening such a rule and giving its exception a target puts the days where you meant them.
Format tokens
Section titled “Format tokens”Format strings control how dates display in your world. You build a format string from format tokens, each written as:
{ScaleName:formatter}{ScaleName:formatter:padding}ScaleName is the name of any temporal scale in your calendar (e.g. Year, Month, Day, Week, Season). formatter picks what to show. padding zero-pads the output to a minimum width.
Available formatters:
| Formatter | Output | Example (Month scale, January) |
|---|---|---|
value |
The numeric value at this scale | {Year:value} → 2024 |
num |
1-indexed number | {Month:num} → 1 |
unit |
Full unit name | {Month:unit} → January |
abbr |
Abbreviated unit name | {Month:abbr} → Jan |
day |
Day within the current unit, starting at 1 | {Day:day} → 15 |
day_ord |
Day with ordinal suffix | {Day:day_ord} → 15th |
sub_unit_name |
Custom day name from a unit’s sub_unit_names list (e.g. Roman day names) |
{Month:sub_unit_name} → Kal. |
Padding (optional third segment): :02 pads to at least 2 digits with a leading zero, :04 to 4 digits.
Format string examples:
| Format string | Displays as |
|---|---|
{Month:unit} {Day:day_ord}, {Year:value} |
January 15th, 2024 |
{Year:value:04}-{Month:num:02}-{Day:day:02} |
2024-01-15 |
{Week:unit}, {Month:abbr} {Day:day} |
Monday, Jan 15 |
{Season:unit} {Day:day_ord}, Year {Year:value} |
Spring 23rd, Year 1542 |
{Month:sub_unit_name} of Year {Year:value} |
Kal. of Year 2024 |
Any text between tokens is kept as-is. Create as many format strings as you like and mark one as the default. The default format is what the app uses when displaying dates throughout your world.
Creating a calendar
Section titled “Creating a calendar”- Go to Manage > Calendars in the world sidebar.
- Click Create Calendar at the top right.
- Choose a preset — Gregorian, Lunar, or Custom — as your starting point.
- Enter a name and optional description for the calendar.
- If this calendar covers your whole world (rather than a specific region or culture), toggle Global on.
- Review the structure preview showing your temporal scales.
- Click Customize Structure to add, edit, or remove scales, units, and intercalation rules.
- Click Create Calendar to save it. The dialog only previews the format strings that control how dates display.
- To change those, click Edit Calendar on the calendar’s card and open the Formats tab.
Calendar fields
Section titled “Calendar fields”| Field | Required | Description |
|---|---|---|
| Name | Yes | A unique name for this calendar within your world |
| Description | No | Notes about this calendar’s cultural or historical context |
| Days per year | Yes | The total number of days in a standard year before intercalation (e.g. 365, 354, 360) |
| Global | No | Whether this calendar applies world-wide or only to a specific region or culture |
| Epoch description | No | A label for what Year 1 represents (e.g. “Years since the Founding”, “After the Sundering”) |
Dating things before Year 1
Section titled “Dating things before Year 1”Your epoch is wherever you decided to start counting — the Founding, the Sundering, a coronation. It is almost never the beginning of your world’s history, and MythTapestry does not treat it as one. You can date anything before it.
Count backwards and you get negative years, exactly the way BC works: the year before Year 1 is Year -1. There is no Year 0. So a creation myth set nine thousand years before the Founding sits at Year -9000, and it sorts, filters and displays like any other date.
This matters most for:
- Creation myths and deep history. “The Sundering, 9,000 years before the Founding” is a date, not a note in a description field. Put it on the timeline and your gods’ war shows up in the same view as last week’s tavern brawl.
- Calendars that start at a reset. If your empire recounts years from its conquest, everything before the conquest is pre-epoch — which is most of your world.
- Imported worlds. If you imported a map and later chose an epoch partway through its history, the events before that point still date correctly. You do not have to redo the import or move your epoch.
Typing a date before Year 1
Section titled “Typing a date before Year 1”Wherever you enter a date, there are two ways in:
- In a date field, switch to the scale view using the small icon at the right of the box, and type the year with a minus in front of it —
-9000. The scales that count, such as Year and Era, take a minus; the ones that name a position inside a cycle, such as Month and Day, stay positive, because there is no third month before the first one. - In the calendar picker, step the year back past Year 1 with the arrow beside it. The next year back from Year 1 is Year -1, and it keeps going from there.
There is no Year 0 in either. The year before Year 1 is Year -1, the way 1 BC runs straight into 1 AD, so a span from Year -1 to Year 1 is two years long and not three.
A date your calendar does not have is refused rather than quietly adjusted. Ask for the 31st of a 30-day month and the field says so, telling you what that month runs to in that particular year, instead of accepting it and storing the 1st of the next one. It counts your leap rules while it checks, so a month that gains a day in some years accepts that extra day in exactly the years it has it.
The same goes for a month your year doesn’t have. Type Month 13 into a twelve-month calendar and you’re told “Month runs from 1 to 12 in this cycle, so there is no 13.” A period your leap rules add as one of its own, such as five festival days after the last month, counts as one more month in the years it appears.
When a date is refused, the field keeps what you typed so you can correct it, and it lets go of the date it held before. A form never saves an older date while showing you a different one.
A few more things about the scale view:
- It saves when you leave it. Moving between Year, Month and Day saves nothing. The date is saved when you press Enter or move on to another field, so you never store a half-typed date.
- Empty boxes below the ones you fill count as the first. Type Year 1205 alone and you get the first day of 1205. Boxes above the ones you fill stay empty, so Year -9000 on its own still means 9000 years before your epoch.
- Emptying every box clears the date.
- Day numbers are whole numbers. In the day-number view,
12.5and1e3are refused rather than read as 12 and 1.
Both land on the same day, so use whichever suits what you have in front of you — the picker when you want to see the month laid out, the scale view when you already know the year and it is a long way back. The picker applies your leap rules as it goes, so a month that gains a day in a leap year shows that extra day when you reach it. If your calendar has a week, each day sits under its own weekday: 1 March 1205 lands under Tuesday, and the empty cells before it are the end of February.
Your leap rules keep counting backwards as well, without restarting. A rule that adds a day every fourth year adds it to Year -4 exactly as it does to Year 4, and it keeps counting through an era boundary rather than starting over at the top of each era — so an empire that recounts its years every three centuries still gets its leap days in the right places on either side of the reset.
A pre-epoch date reads back as a date wherever one is shown — in date fields, on the timeline, and while you drag along it. As long as your calendar has a date format set up, it reads the way the dates after your epoch do; a calendar with no format yet falls back to a plain count of days, for every date rather than just the old ones. A padded year keeps its minus sign in front of the padding, so under a {Year:value:04} format the fiftieth year before your epoch reads -0050-06-15, the same in every screen.
There is a far edge. A date more than a million years (or cycles, whatever your calendar counts) from your epoch is refused with that reason, rather than shown as a wrong date.
Before your world has a calendar
Section titled “Before your world has a calendar”A date field in a world with no calendar is a plain day-number field. There is nothing yet to read “14 March 1205” against, so the field takes a number such as 1205 and says, under the box, that the world has no calendar yet, with a link to create one. The dates you enter this way are kept: once you create a calendar, they show as dates in it.
How calendars apply across your world
Section titled “How calendars apply across your world”MythTapestry uses a simple priority system to decide which calendar applies where:
World default calendar └── Content unit override (a chapter set in a different culture) └── Inline date mark override (a single date mention in your prose)- World level: The world’s default calendar is used everywhere — events, entity fields, date references, chat answers and AI extraction all go through it. Manage > Calendars marks it Default, and Set as default on any other calendar moves the mark. Until you choose one, the default is your first world-wide calendar, so a world with one calendar never needs this. Deleting the default hands the role to the next calendar.
- Content unit level: Each chapter or scene can override the calendar if the narrative takes place in a culture that uses a different one.
- Inline mark level: Individual date references in your writing can specify their own calendar, overriding both the world and content unit defaults.
Linking two calendars
Section titled “Linking two calendars”If your world has multiple calendars, you can establish a calendar reference date to align their timelines. You specify one date in Calendar A and the equivalent date in Calendar B. From that anchor, MythTapestry can convert any date in either calendar to the other.
Example: “Year 1 of the Imperial Calendar is the same day as Year 433 of the Old Calendar.” After setting this reference, a date entered in the Imperial Calendar automatically shows its Old Calendar equivalent wherever both are relevant.
- Go to Manage > Calendars.
- Open the calendar you want to align (the source calendar).
- Click Link to another calendar.
- Choose the target calendar — the one you’re aligning with.
- Enter the source date in the source calendar’s own notation.
- Enter the target date — the matching date in the target calendar.
- Add an optional description (e.g. “Imperial Year 1 = Old Calendar Year 433”).
- Save the reference.
After linking, date conversion between the two calendars is automatic.
What the Gregorian preset includes
Section titled “What the Gregorian preset includes”- Hierarchical scales: Year → Month (12 named units, January–December, with variable lengths) → Day
- Overlay scale: Week (7-day cycle: Monday–Sunday)
- Subdivision scales: Hour (24 per day) → Minute (60 per hour) → Second (60 per minute)
- Intercalation: Two rules implementing the standard Gregorian leap year pattern
- Format strings: ISO 8601, Long Date, Date & Time, Weekday Date, and Short Numeric
Building a custom fantasy calendar: example
Section titled “Building a custom fantasy calendar: example”Here is a complete structure for a fantasy world with seasonal months and a ten-day week:
| Scale | Type | Structure |
|---|---|---|
| Era | Hierarchical (root) | Numeric counter; no named units |
| Year | Hierarchical | Numeric counter; 360 days |
| Season | Hierarchical | 4 named units: Spring, Summer, Autumn, Winter (90 days each) |
| Day | Hierarchical (leaf) | Numbers 1–90 within each season |
| Tenday | Overlay | 10-day cycle with units: Firstday through Tenday |
| Hour | Subdivision | 24 per day |
| Minute | Subdivision | 60 per hour |
A format string for this calendar:
{Tenday:unit}, {Day:day_ord} of {Season:unit}, Year {Year:value} of Era {Era:value}Displays as: Sixthday, 23rd of Summer, Year 1542 of Era 3
