A proposal for a better calendar. (If we didn’t have the Gregorian calendar already and wanted to start from scratch.)
No Name Days -- ---- ---- 01 January 30 02 February 31 03 March 30 04 April 31 05 May 30 06 June 31 07 July 30 08 August 31 09 September 30 10 October 31 11 November 30 12 December 30 or 31
This would space out the months more equitably. Almost all two-month peroids would be exactly 61 days, the exception being December in non-leap years.
I would define January 1 to be the day after the Winter Solstice (at a fixed zero meridean). So all dates would be around ten days off fromthe Gregorain calendar.
As a result of this rule there would be around 8 leap days every 33 years, similar to how the Iranian/Persian/Jalāli Calendar works.
* * *
Of course the final calendar we will all come to accept millenia from now will probably simply be TAI with picosecond precision, expressed as a number of seconds since some fixed instant. Then calculating intervals become trivially simple, and we will just ignore where the sun is.
* * *
Additional, optional rules to make this a perpetual calendar: January 1 is always a Saturday. Then on 365-day years, you would get two Saturdays in a row:
12-29 12-30 | 01-01 01-02 01-03 Fri Sat | Sat Sun Mon
Or a double weekend on leap years:
12-29 12-30 12-31 | 01-01 01-02 01-03 Fri Sat Sun | Sat Sun Mon
* * *
Note that one could make the existing Gregorian Calendar into a perpetual calendar by defining March 1 as always a Saturday.
02-27 02-28 | 03-01 03-02 03-03 Fri Sat | Sat Sun Mon
02-27 02-28 02-29 | 03-01 03-02 03-03 Fri Sat Sun | Sat Sun Mon
* * *
UPDATE 2008-10-25: Here’s very simple python code to give the month, day, and week, given the day of year.
# returns (month, day-of-month, weekday)
# given day-of-year
def dayandmonth(yday):
assert (yday > 0) and (yday < 367)
da = ((yday - 1) % 61) + 1
mo = (((yday - 1) // 61 ) * 2) + 1
if (da > 30):
da = da - 30
mo = mo + 1
wd = (yday - 1) % 7 +1
return (mo, da, wd)
And a leap year function:
# offset is determined by solar
# observations at the reference
# longitude
def isleapyear(y):
offset = 2
y = (y + offset) % 33
if (y != 32) and ((y % 4) == 0):
return True
else:
return False
Every 10,000 years, the offset may need to be changed. After 100,000 years, a new algorithm will likely be necessary