177 lines
4.5 KiB
Batchfile
177 lines
4.5 KiB
Batchfile
@echo off
|
|
goto Parse
|
|
|
|
Discordian Date Converter:
|
|
|
|
Usage:
|
|
ddate
|
|
ddate /v
|
|
ddate /d isoDate
|
|
ddate /v /d isoDate
|
|
|
|
:Parse
|
|
shift
|
|
if "%0"=="" goto Prologue
|
|
if "%0"=="/v" set Verbose=1
|
|
if "%0"=="/d" set dateToTest=%1
|
|
if "%0"=="/d" shift
|
|
goto Parse
|
|
|
|
:Prologue
|
|
if "%dateToTest%"=="" set dateToTest=%date%
|
|
for %%a in (GYear GMonth GDay GMonthName GWeekday GDayThisYear) do set %%a=fnord
|
|
for %%a in (DYear DMonth DDay DMonthName DWeekday) do set %%a=MUNG
|
|
goto Start
|
|
|
|
:Start
|
|
for /f "tokens=1,2,3 delims=/:;-. " %%a in ('echo %dateToTest%') do (
|
|
set GYear=%%a
|
|
set GMonth=%%b
|
|
set GDay=%%c
|
|
)
|
|
goto GMonthName
|
|
|
|
:GMonthName
|
|
if %GMonth% EQU 1 set GMonthName=January
|
|
if %GMonth% EQU 2 set GMonthName=February
|
|
if %GMonth% EQU 3 set GMonthName=March
|
|
if %GMonth% EQU 4 set GMonthName=April
|
|
if %GMonth% EQU 5 set GMonthName=May
|
|
if %GMonth% EQU 6 set GMonthName=June
|
|
if %GMonth% EQU 7 set GMonthName=July
|
|
if %GMonth% EQU 8 set GMonthName=August
|
|
if %GMonth% EQU 9 set GMonthName=September
|
|
if %GMonth% EQU 10 set GMonthName=October
|
|
if %GMonth% EQU 11 set GMonthName=November
|
|
if %GMonth% EQU 12 set GMonthName=December
|
|
goto GLeap
|
|
|
|
:GLeap
|
|
set /a CommonYear=GYear %% 4
|
|
set /a CommonCent=GYear %% 100
|
|
set /a CommonQuad=GYear %% 400
|
|
set GLeap=0
|
|
if %CommonYear% EQU 0 set GLeap=1
|
|
if %CommonCent% EQU 0 set GLeap=0
|
|
if %CommonQuad% EQU 0 set GLeap=1
|
|
goto GDayThisYear
|
|
|
|
:GDayThisYear
|
|
set GDayThisYear=%GDay%
|
|
if %GMonth% GTR 11 set /a GDayThisYear=%GDayThisYear%+30
|
|
if %GMonth% GTR 10 set /a GDayThisYear=%GDayThisYear%+31
|
|
if %GMonth% GTR 9 set /a GDayThisYear=%GDayThisYear%+30
|
|
if %GMonth% GTR 8 set /a GDayThisYear=%GDayThisYear%+31
|
|
if %GMonth% GTR 7 set /a GDayThisYear=%GDayThisYear%+31
|
|
if %GMonth% GTR 6 set /a GDayThisYear=%GDayThisYear%+30
|
|
if %GMonth% GTR 5 set /a GDayThisYear=%GDayThisYear%+31
|
|
if %GMonth% GTR 4 set /a GDayThisYear=%GDayThisYear%+30
|
|
if %GMonth% GTR 3 set /a GDayThisYear=%GDayThisYear%+31
|
|
if %GMonth% GTR 2 if %GLeap% EQU 1 set /a GDayThisYear=%GDayThisYear%+29
|
|
if %GMonth% GTR 2 if %GLeap% EQU 0 set /a GDayThisYear=%GDayThisYear%+28
|
|
if %GMonth% GTR 1 set /a GDayThisYear=%GDayThisYear%+31
|
|
goto DYear
|
|
|
|
:DYear
|
|
set /a DYear=GYear+1166
|
|
goto DMonth
|
|
|
|
:DMonth
|
|
set DMonth=1
|
|
set DDay=%GDayThisYear%
|
|
if %DDay% GTR 73 (
|
|
set /a DDay=%DDay%-73
|
|
set /a DMonth=%DMonth%+1
|
|
)
|
|
if %DDay% GTR 73 (
|
|
set /a DDay=%DDay%-73
|
|
set /a DMonth=%DMonth%+1
|
|
)
|
|
if %DDay% GTR 73 (
|
|
set /a DDay=%DDay%-73
|
|
set /a DMonth=%DMonth%+1
|
|
)
|
|
if %DDay% GTR 73 (
|
|
set /a DDay=%DDay%-73
|
|
set /a DMonth=%DMonth%+1
|
|
)
|
|
goto DDay
|
|
|
|
:DDay
|
|
if %GLeap% EQU 1 (
|
|
if %GDayThisYear% GEQ 61 (
|
|
set /a DDay=%DDay%-1
|
|
)
|
|
)
|
|
if %DDay% EQU 0 (
|
|
set /a DDay=73
|
|
set /a DMonth=%DMonth%-1
|
|
)
|
|
goto DMonthName
|
|
|
|
:DMonthName
|
|
if %DMonth% EQU 1 set DMonthName=Chaos
|
|
if %DMonth% EQU 2 set DMonthName=Discord
|
|
if %DMonth% EQU 3 set DMonthName=Confusion
|
|
if %DMonth% EQU 4 set DMonthName=Bureaucracy
|
|
if %DMonth% EQU 5 set DMonthName=Aftermath
|
|
goto DTib
|
|
|
|
:DTib
|
|
set DTib=0
|
|
if %GDayThisYear% EQU 60 if %GLeap% EQU 1 set DTib=1
|
|
if %GLeap% EQU 1 if %GDayThisYear% GTR 60 set /a GDayThisYear=%GDayThisYear%-1
|
|
set DWeekday=%GDayThisYear%
|
|
goto DWeekday
|
|
|
|
:DWeekday
|
|
if %DWeekday% LEQ 5 goto _DWeekday
|
|
set /a DWeekday=%DWeekday%-5
|
|
goto DWeekday
|
|
:_DWeekday
|
|
if %DWeekday% EQU 1 set DWeekday=Sweetmorn
|
|
if %DWeekday% EQU 2 set DWeekday=Boomtime
|
|
if %DWeekday% EQU 3 set DWeekday=Pungenday
|
|
if %DWeekday% EQU 4 set DWeekday=Prickle-Prickle
|
|
if %DWeekday% EQU 5 set DWeekday=Setting Orange
|
|
goto GWeekday
|
|
|
|
:GWeekday
|
|
goto GEnding
|
|
|
|
:GEnding
|
|
set GEnding=th
|
|
for %%a in (1 21 31) do if %GDay% EQU %%a set GEnding=st
|
|
for %%a in (2 22) do if %GDay% EQU %%a set GEnding=nd
|
|
for %%a in (3 23) do if %GDay% EQU %%a set GEnding=rd
|
|
goto DEnding
|
|
|
|
:DEnding
|
|
set DEnding=th
|
|
for %%a in (1 21 31 41 51 61 71) do if %Dday% EQU %%a set DEnding=st
|
|
for %%a in (2 22 32 42 52 62 72) do if %Dday% EQU %%a set DEnding=nd
|
|
for %%a in (3 23 33 43 53 63 73) do if %Dday% EQU %%a set DEnding=rd
|
|
goto Display
|
|
|
|
:Display
|
|
if "%Verbose%"=="1" goto Display2
|
|
echo.
|
|
if %DTib% EQU 1 (
|
|
echo St. Tib's Day, %DYear%
|
|
) else echo %DWeekday%, %DMonthName% %DDay%%DEnding%, %DYear%
|
|
goto Epilogue
|
|
|
|
:Display2
|
|
echo.
|
|
echo Gregorian: %GMonthName% %GDay%%GEnding%, %GYear%
|
|
if %DTib% EQU 1 (
|
|
echo Discordian: St. Tib's Day, %DYear%
|
|
) else echo Discordian: %DWeekday%, %DMonthName% %DDay%%DEnding%, %DYear%
|
|
goto Epilogue
|
|
|
|
:Epilogue
|
|
set Verbose=
|
|
set dateToTest=
|
|
echo.
|
|
|
|
:End
|