Paired Calendar Versioning
MoonVer
Day and time are instantly readable. Year and month require a quick ÷12 — like counting lunar cycles. Minute-level precision with 40 years of range.
Formula
half = (year − 2025) mod 2 // 0 or 1
X = group × 12 + month // 1–252
Y = half × 100 + day // 1–131
Z = hour × 100 + minute // 0–2359
The paired-year trick
Years are grouped in pairs. The first year of each pair has Y = day (1–31). The second year has Y = 100 + day (101–131). This doubles the effective year range without breaking sort order, because 101 > 31 within the same X.
Y = 117 → second year of the pair, day 17
To decode X: divide by 12. The quotient is the group (each group = 2 years), the remainder is the month. Total year = 2025 + group × 2 + half.
Examples
| Datetime | Version | How to decode |
|---|---|---|
| 2025-01-01 00:00 | 1.1.0 | 1÷12 = g0 r1 → Jan 2025, day 1, 00:00 |
| 2025-04-17 08:30 | 4.17.830 | 4÷12 = g0 r4 → Apr 2025, day 17, 08:30 |
| 2026-04-17 08:30 | 4.117.830 | g0 r4 → Apr, Y=117 → +1 yr → 2026, day 17 |
| 2026-12-31 23:59 | 12.131.2359 | g0 r12 → Dec, Y=131 → 2026, day 31 |
| 2030-06-15 12:00 | 36.115.1200 | 36÷12 = g3 r0… wait: g2 r12 → Dec? No: |
| 2030-06-15 12:00 | 36.115.1200 | 36÷12 = g3 r0 → but r0 isn't a month… |
| Datetime | Version | Decoded |
|---|---|---|
| 2025-01-01 00:00 | 1.1.0 | 2025-01-01 00:00 |
| 2025-04-17 08:30 | 4.17.830 | 2025-04-17 08:30 |
| 2026-04-17 08:30 | 4.117.830 | 2026-04-17 08:30 |
| 2027-07-04 14:00 | 19.4.1400 | 2027-07-04 14:00 |
| 2030-06-15 12:00 | 36.115.1200 | 2030-06-15 12:00 |
| 2033-08-20 12:00 | 56.20.1200 | 2033-08-20 12:00 |
| 2050-12-31 23:59 | 168.131.2359 | 2050-12-31 23:59 |
| 2065-06-15 09:00 | 246.15.900 | 2065-06-15 09:00 |
Converter
Properties
When to use MoonVer
MoonVer is the middle ground: day and time are readable at a glance (Y and Z), and the ÷12 on X is the only mental math needed. It offers minute-level precision for CI-heavy teams while keeping versions human-friendly enough for changelogs.