Skip to content

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.

Calendar structure editor showing the temporal scales of the Verenthian Reckoning: tabbed interface with Basic Info / Structure / Formats / Rules / Patterns, hierarchical scales section listing Year (12 Months), Month (30 Days, 360 days total), and Day (BASE, 1 absolute day) with drag handles, edit, and add controls

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 typePurposeExamples
HierarchicalNested time divisions, from large to smallYear → Month → Day; Age → Cycle → Beat
OverlayA repeating cycle that runs across the hierarchyA 7-day week; a moon phase cycle; a market cycle
SubdivisionTime within a single dayHour, Minute, Second; Bell, Quarter; Watch, Glass

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 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.

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.

Each hierarchical or overlay scale can contain units — the named entries within it.

PropertyDescription
NameThe full label for this unit (e.g. “January”, “Monday”, “First Quarter”)
AbbreviationA short form for compact display (e.g. “Jan”, “Mon”)
OrdinalThe unit’s position within the scale, counting from zero
Unit lengthHow many days this unit spans (for day-level hierarchical units)
Is variableCheck 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.

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:

PropertyDescription
Every N cyclesHow often the rule fires (e.g. every 4 years)
Except every M cyclesSkip the rule at this interval (e.g. except every 100 years)
Re-include every P cyclesOverride the exception (e.g. apply again every 400 years)
TargetsWhat changes when the rule fires

Each rule applies one or more targets:

Target typeWhat it doesExample
Extend unitAdd days to an existing variable-length unitAdd 1 day to February
Insert periodInsert a standalone period at a fixed positionInsert “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 anyway

This produces the familiar 365/365/365/366 pattern, with century years non-leap except those divisible by 400.

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:

FormatterOutputExample (Month scale, January)
valueThe numeric value at this scale{Year:value}2024
num1-indexed number{Month:num}1
unitFull unit name{Month:unit}January
abbrAbbreviated unit name{Month:abbr}Jan
dayDay within the current unit, starting at 1{Day:day}15
day_ordDay with ordinal suffix{Day:day_ord}15th
sub_unit_nameCustom 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 stringDisplays 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.


  1. Go to Management > Calendars in the world sidebar.
  2. Click Create Calendar.
  3. Choose a preset — Gregorian, Lunar, or Custom — as your starting point.
  4. Enter a name and optional description for the calendar.
  5. If this calendar covers your whole world (rather than a specific region or culture), toggle Global on.
  6. Review the structure preview showing your temporal scales.
  7. Click Customize Structure to add, edit, or remove scales, units, and intercalation rules.
  8. Review and edit format strings to control how dates from this calendar display.
  9. Save the calendar.
FieldRequiredDescription
NameYesA unique name for this calendar within your world
DescriptionNoNotes about this calendar’s cultural or historical context
Days per yearYesThe total number of days in a standard year before intercalation (e.g. 365, 354, 360)
GlobalNoWhether this calendar applies world-wide or only to a specific region or culture
Epoch descriptionNoA label for what Year 1 represents (e.g. “Years since the Founding”, “After the Sundering”)

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 calendar you designate as global is used everywhere by default — events, entity fields, and date references all inherit it.
  • 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.

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.

  1. Go to Management > Calendars.
  2. Open the calendar you want to align (the source calendar).
  3. Click Link to another calendar.
  4. Choose the target calendar — the one you’re aligning with.
  5. Enter the source date in the source calendar’s own notation.
  6. Enter the target date — the matching date in the target calendar.
  7. Add an optional description (e.g. “Imperial Year 1 = Old Calendar Year 433”).
  8. Save the reference.

After linking, date conversion between the two calendars is automatic.


  • 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:

ScaleTypeStructure
EraHierarchical (root)Numeric counter; no named units
YearHierarchicalNumeric counter; 360 days
SeasonHierarchical4 named units: Spring, Summer, Autumn, Winter (90 days each)
DayHierarchical (leaf)Numbers 1–90 within each season
TendayOverlay10-day cycle with units: Firstday through Tenday
HourSubdivision24 per day
MinuteSubdivision60 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