Skip to content

Creating Calendars

MythTapestry’s calendar system uses a unified temporal scale architecture that supports everything from simple Earth-like calendars to entirely original time-keeping systems.

A temporal scale is a named level in your calendar. Each scale has a type that determines how it behaves:

Scale typePurposeExample
HierarchicalNested parent-child time unitsYear → Month → Day
OverlayIndependent repeating cycle across a base unitWeek (7-day cycle over days), Moon phases
SubdivisionFractional parts below a dayHour (24 per day), Minute (60 per hour)

Hierarchical scales form the backbone of your calendar. A Year contains Months, which contain Days. Each level references its parent and defines how many units it contains via units_per_parent.

Overlay scales repeat independently of the hierarchy. A week is 7 days long regardless of month boundaries. Overlays need a cycle base unit (typically days) and a cycle length (e.g. 7). They also need an anchor point — a reference date that tells the system which overlay unit a given day falls on (e.g. “Day 1 of Year 1 is a Monday”).

Subdivision scales break a day into fractional parts. Hours, minutes, and seconds are subdivisions. They use is_fractional = true and store time as a decimal fraction of a day (0.0 to < 1.0).

Each scale contains units — the named or numbered entries within it. For example, the Month scale might have 12 units: January through December. Each unit has:

  • Name (optional — unnamed units are just numbered)
  • Ordinal (0-indexed position within the scale)
  • Unit length (in days for day-level units, fractional for subdivisions)
  • Is variable (true if affected by intercalation rules, like February)

Intercalation handles irregular patterns like leap years. Rules are defined with:

  • Every N cycles — how often the rule applies (e.g. every 4 years)
  • Except every M cycles — exception to the rule (e.g. except every 100 years)
  • Targets — what changes when the rule fires

Each rule has one or more targets that can either:

Target typeWhat it doesExample
Extend unitAdd days to an existing unitAdd 1 day to February
Insert periodInsert a standalone periodInsert “Epagomenal Days” after day 360

Format strings control how dates are displayed. They use dynamic tokens with the syntax:

{ScaleName:formatter:options}

Formatters:

FormatterOutputExample
valueNumeric (0-indexed){Year:value} → “2024”
numNumeric (1-indexed){Month:num} → “1” for January
unitUnit name{Month:unit} → “January”
dayDay within unit (1-indexed){Day:day} → “15”
day_ordDay as ordinal{Day:day_ord} → “15th”
abbrAbbreviated name{Month:abbr} → “Jan”

Options (after second colon):

  • :02, :04 — zero-pad to width

Examples:

  • {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”
  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.
  5. Optionally toggle Global if this calendar applies world-wide (vs. regionally).
  6. Review the structure preview showing your temporal scales.
  7. Click Customize Structure if you need to modify scales, units, or intercalation rules.
  8. Review format strings for how dates will display.
  9. Save the calendar.
FieldRequiredDescription
NameYesUnique name within the world
DescriptionNoRich text description
Days per yearYesTotal days in a standard year (e.g. 365, 354, 360)
GlobalNoWhether this is the world-wide calendar or regional
Epoch descriptionNoText describing the calendar’s epoch (e.g. “Years since the Founding”)

Calendars don’t just store dates — they provide context across the system. MythTapestry uses an inheritance chain so you can set defaults at the world level and override them where needed:

World default calendar
└── Content unit override (narrative time context)
└── Inline date mark override (per-mark calendar + precision)
  • World level: Your world’s primary (global) calendar is used everywhere by default — events, entity fields, content units, and inline date marks all inherit it.
  • Content unit level: Each content unit can override the calendar, time range, and precision in its narrative time context. For example, a chapter set in a different culture might use that culture’s regional calendar.
  • Inline mark level: Individual date mentions and date links within prose text can specify their own calendar and precision, overriding both the world and content unit defaults.
  • Hierarchical scales: Year → Month (12 units, Jan–Dec, variable days) → 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 for standard leap year logic
  • Format strings: ISO 8601, Long Date, Date & Time, Weekday Date, Short Numeric