Discordian calendar

I used to follow a bot on twtxt that would post the current date in the Discordian calendar every day. I really enjoyed it at the time, but when I checked it out again recently, it no longer existed. So I decided to write my own script to enumerate the Discordian calendar.

My script doesn’t have a fancy algorithm to convert arbitrary dates between the Gregorian and Discordian calendars. It just starts from a reference date and follows the rules of the Discordian calendar to enumerate the dates.

This is okay, computers are fast and we can precompute the entire calendar for for thousands of years in a few seconds. So this is pretty much a non-issue for me.

Below is the script I wrote, it will start from 1970-01-01 (heh, the Unix epoch), and print out the Discordian date for every day after that. Feel free to save the output to a file and use it as a reference.

import time
import datetime

SEASONS = [
    "Chaos",
    "Discord",
    "Confusion",
    "Bureaucracy",
    "The Aftermath",
]

WEEKDAYS = [
    "Sweetmorn",
    "Boomtime",
    "Pungenday",
    "Prickle-Prickle",
    "Setting Orange",
]

APOSTLE_HOLYDAYS = [
    "Mungday",
    "Mojoday",
    "Syaday",
    "Zaraday",
    "Maladay",
]

SEASONAL_HOLYDAYS = [
    "Chaoflux",
    "Discoflux",
    "Confuflux",
    "Bureflux",
    "Afflux",
]

REF_DATE = datetime.date(1970, 1, 1)

def discordian_dates():
    day_of_year = 0
    season = 0
    day = 0
    year = 3136

    total_days = 0

    while True:
        real_date = REF_DATE + datetime.timedelta(days=total_days)

        season_s = SEASONS[season]
        weekday_s = WEEKDAYS[day_of_year % 5]

        if day == 4:
            holyday = APOSTLE_HOLYDAYS[season]
            holyday = f"Apostle holyday: {holyday}"
        elif day == 49:
            holyday = SEASONAL_HOLYDAYS[season]
            holyday = f"Seasonal holyday: {holyday}"
        else:
            holyday = ""

        yield str(real_date), weekday_s, season_s, str(day + 1), f"{year} Year of Our Lady Discord", holyday

        if (year + 2) % 4 == 0 and season == 0 and day == 58:
            total_days += 1
            real_date = REF_DATE + datetime.timedelta(days=total_days)
            yield str(real_date), "St. Tib's Day", "", "", f"{year} Year of Our Lady Discord", ""

        day_of_year += 1
        day += 1
        total_days += 1

        if day == 73:
            day = 0
            season += 1
            if season == 5:
                season = 0
                year += 1
                day_of_year = 0



for parts in discordian_dates():
    justs = [10, 15, 13, 2, 30, 0]
    out = " | ".join([x.ljust(y) for x, y in zip(parts, justs)])
    print(out)

Here’s some sample output:

Date Weekday Season Day Year of Our Lady Discord Holyday
2023-09-01 Prickle-Prickle Bureaucracy 25 3189 Year of Our Lady Discord  
2023-09-02 Setting Orange Bureaucracy 26 3189 Year of Our Lady Discord  
2023-09-03 Sweetmorn Bureaucracy 27 3189 Year of Our Lady Discord  
2023-09-04 Boomtime Bureaucracy 28 3189 Year of Our Lady Discord  
2023-09-05 Pungenday Bureaucracy 29 3189 Year of Our Lady Discord  
2023-09-06 Prickle-Prickle Bureaucracy 30 3189 Year of Our Lady Discord  
2023-09-07 Setting Orange Bureaucracy 31 3189 Year of Our Lady Discord  
2023-09-08 Sweetmorn Bureaucracy 32 3189 Year of Our Lady Discord  
2023-09-09 Boomtime Bureaucracy 33 3189 Year of Our Lady Discord  
2023-09-10 Pungenday Bureaucracy 34 3189 Year of Our Lady Discord  
2023-09-11 Prickle-Prickle Bureaucracy 35 3189 Year of Our Lady Discord  
2023-09-12 Setting Orange Bureaucracy 36 3189 Year of Our Lady Discord  
2023-09-13 Sweetmorn Bureaucracy 37 3189 Year of Our Lady Discord  
2023-09-14 Boomtime Bureaucracy 38 3189 Year of Our Lady Discord  
2023-09-15 Pungenday Bureaucracy 39 3189 Year of Our Lady Discord  
2023-09-16 Prickle-Prickle Bureaucracy 40 3189 Year of Our Lady Discord  
2023-09-17 Setting Orange Bureaucracy 41 3189 Year of Our Lady Discord  
2023-09-18 Sweetmorn Bureaucracy 42 3189 Year of Our Lady Discord  
2023-09-19 Boomtime Bureaucracy 43 3189 Year of Our Lady Discord  
2023-09-20 Pungenday Bureaucracy 44 3189 Year of Our Lady Discord  
2023-09-21 Prickle-Prickle Bureaucracy 45 3189 Year of Our Lady Discord  
2023-09-22 Setting Orange Bureaucracy 46 3189 Year of Our Lady Discord  
2023-09-23 Sweetmorn Bureaucracy 47 3189 Year of Our Lady Discord  
2023-09-24 Boomtime Bureaucracy 48 3189 Year of Our Lady Discord  
2023-09-25 Pungenday Bureaucracy 49 3189 Year of Our Lady Discord  
2023-09-26 Prickle-Prickle Bureaucracy 50 3189 Year of Our Lady Discord Seasonal holyday: Bureflux
2023-09-27 Setting Orange Bureaucracy 51 3189 Year of Our Lady Discord  
2023-09-28 Sweetmorn Bureaucracy 52 3189 Year of Our Lady Discord  
2023-09-29 Boomtime Bureaucracy 53 3189 Year of Our Lady Discord  
2023-09-30 Pungenday Bureaucracy 54 3189 Year of Our Lady Discord