Created
July 17, 2019 22:28
-
-
Save dakkar/eb1002c68d408356d549d25778a9a19a to your computer and use it in GitHub Desktop.
Dates of Easter according to the International Fixed Calendar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use 5.024; | |
use strict; | |
use warnings; | |
use experimental 'signatures'; | |
use Astro::MoonPhase (); | |
use DateTime; | |
use DateTime::Event::Easter; | |
# IFC = International Fixed Calendar | |
# converts a datetime into a IFC date | |
sub to_ifc($dt) { | |
my $doy = $dt->day_of_year - 1; # method result starts at 1 | |
my $IFC_month = 1 + int($doy / 28); # all months are 28 days | |
my $IFC_day = $doy % 28 + 1; | |
my $IFC_dow = $doy % 7; # all months start on Sunday | |
my $IFC_dow_name = [qw(Sun Mon Tue Wed Thu Fri Sat)]->[$IFC_dow]; | |
return { | |
month => $IFC_month, | |
day => $IFC_day, | |
dow => $IFC_dow, | |
dow_name => $IFC_dow_name | |
}; | |
} | |
sub first_ifc_sunday_after($start_dt) { | |
return undef unless $start_dt; | |
for my $days (0..7) { # we'll hit a sunday in 8 days! | |
my $dt = $start_dt->clone->add(days => $days); | |
my $ifc = to_ifc($dt); | |
return $dt if $ifc->{dow} == 0 | |
} | |
return undef; | |
} | |
sub format_date($dt) { | |
return "none?" unless $dt; | |
my $normal_date = $dt->strftime('%m-%d %a'); | |
my $ifc_date = to_ifc($dt); | |
return sprintf '%s (%03d = %02d-%02d %s)', | |
$normal_date, | |
$dt->doy, | |
@{$ifc_date}{qw(month day dow_name)}; | |
} | |
sub full_moon_between($start_dt,$stop_dt) { | |
# code copied from Astro::MoonPhase documentation | |
my ($phase,@times) = Astro::MoonPhase::phaselist( | |
$start_dt->epoch, | |
# phaselist excludes the last day, let's add one | |
$stop_dt->epoch + 86400, | |
); | |
while (@times) { | |
if ($phase == 2) { # full moon | |
return DateTime->from_epoch( epoch => $times[0] ); | |
} | |
shift @times; | |
$phase = ($phase + 1) % 4; | |
} | |
return undef; | |
} | |
# print date of Catholic Easter in Gregorian calendar and IFC | |
sub for_year($year) { | |
my $solstice = DateTime->new( | |
year => $year, | |
month => 3, | |
day => 20, # good enough | |
hour => 12, | |
time_zone => 'Europe/Rome', | |
); | |
my $easter_sunday = DateTime::Event::Easter->new( | |
easter => 'western', | |
day => 'Easter Sunday', | |
as => 'point', | |
)->following($solstice); | |
my $full_moon = full_moon_between($solstice, $easter_sunday); | |
my $IFC_easter = first_ifc_sunday_after($full_moon); | |
printf "%04d: full moon: %s easter: %s ifc easter: %s\n", | |
$year, | |
format_date($full_moon), | |
format_date($easter_sunday), | |
format_date($IFC_easter), | |
; | |
} | |
for my $year (1900..2000) { | |
for_year($year); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1900: full moon: 04-15 Sun (105 = 04-21 Sat) easter: 04-15 Sun (105 = 04-21 Sat) ifc easter: 04-16 Mon (106 = 04-22 Sun) | |
1901: full moon: 04-04 Thu (094 = 04-10 Tue) easter: 04-07 Sun (097 = 04-13 Fri) ifc easter: 04-09 Tue (099 = 04-15 Sun) | |
1902: full moon: 03-24 Mon (083 = 03-27 Fri) easter: 03-30 Sun (089 = 04-05 Thu) ifc easter: 03-26 Wed (085 = 04-01 Sun) | |
1903: full moon: 04-12 Sun (102 = 04-18 Wed) easter: 04-12 Sun (102 = 04-18 Wed) ifc easter: 04-16 Thu (106 = 04-22 Sun) | |
1904: full moon: 03-31 Thu (091 = 04-07 Sat) easter: 04-03 Sun (094 = 04-10 Tue) ifc easter: 04-01 Fri (092 = 04-08 Sun) | |
1905: full moon: 03-21 Tue (080 = 03-24 Tue) easter: 04-23 Sun (113 = 05-01 Sun) ifc easter: 03-26 Sun (085 = 04-01 Sun) | |
1906: full moon: 04-09 Mon (099 = 04-15 Sun) easter: 04-15 Sun (105 = 04-21 Sat) ifc easter: 04-09 Mon (099 = 04-15 Sun) | |
1907: full moon: 03-29 Fri (088 = 04-04 Wed) easter: 03-31 Sun (090 = 04-06 Fri) ifc easter: 04-02 Tue (092 = 04-08 Sun) | |
1908: full moon: 04-16 Thu (107 = 04-23 Mon) easter: 04-19 Sun (110 = 04-26 Thu) ifc easter: 04-22 Wed (113 = 05-01 Sun) | |
1909: full moon: 04-05 Mon (095 = 04-11 Wed) easter: 04-11 Sun (101 = 04-17 Tue) ifc easter: 04-09 Fri (099 = 04-15 Sun) | |
1910: full moon: 03-25 Fri (084 = 03-28 Sat) easter: 03-27 Sun (086 = 04-02 Mon) ifc easter: 03-26 Sat (085 = 04-01 Sun) | |
1911: full moon: 04-13 Thu (103 = 04-19 Thu) easter: 04-16 Sun (106 = 04-22 Sun) ifc easter: 04-16 Sun (106 = 04-22 Sun) | |
1912: full moon: 04-01 Mon (092 = 04-08 Sun) easter: 04-07 Sun (098 = 04-14 Sat) ifc easter: 04-01 Mon (092 = 04-08 Sun) | |
1913: full moon: 03-22 Sat (081 = 03-25 Wed) easter: 03-23 Sun (082 = 03-26 Thu) ifc easter: 03-26 Wed (085 = 04-01 Sun) | |
1914: full moon: 04-10 Fri (100 = 04-16 Mon) easter: 04-12 Sun (102 = 04-18 Wed) ifc easter: 04-16 Thu (106 = 04-22 Sun) | |
1915: full moon: 03-31 Wed (090 = 04-06 Fri) easter: 04-04 Sun (094 = 04-10 Tue) ifc easter: 04-02 Fri (092 = 04-08 Sun) | |
1916: full moon: 04-18 Tue (109 = 04-25 Wed) easter: 04-23 Sun (114 = 05-02 Mon) ifc easter: 04-22 Sat (113 = 05-01 Sun) | |
1917: full moon: 04-07 Sat (097 = 04-13 Fri) easter: 04-08 Sun (098 = 04-14 Sat) ifc easter: 04-09 Mon (099 = 04-15 Sun) | |
1918: full moon: 03-27 Wed (086 = 04-02 Mon) easter: 03-31 Sun (090 = 04-06 Fri) ifc easter: 04-02 Tue (092 = 04-08 Sun) | |
1919: full moon: 04-15 Tue (105 = 04-21 Sat) easter: 04-20 Sun (110 = 04-26 Thu) ifc easter: 04-16 Wed (106 = 04-22 Sun) | |
1920: full moon: 04-03 Sat (094 = 04-10 Tue) easter: 04-04 Sun (095 = 04-11 Wed) ifc easter: 04-08 Thu (099 = 04-15 Sun) | |
1921: full moon: 03-23 Wed (082 = 03-26 Thu) easter: 03-27 Sun (086 = 04-02 Mon) ifc easter: 03-26 Sat (085 = 04-01 Sun) | |
1922: full moon: 04-11 Tue (101 = 04-17 Tue) easter: 04-16 Sun (106 = 04-22 Sun) ifc easter: 04-16 Sun (106 = 04-22 Sun) | |
1923: full moon: 04-01 Sun (091 = 04-07 Sat) easter: 04-01 Sun (091 = 04-07 Sat) ifc easter: 04-02 Mon (092 = 04-08 Sun) | |
1924: full moon: 03-21 Fri (081 = 03-25 Wed) easter: 04-20 Sun (111 = 04-27 Fri) ifc easter: 03-25 Tue (085 = 04-01 Sun) | |
1925: full moon: 04-09 Thu (099 = 04-15 Sun) easter: 04-12 Sun (102 = 04-18 Wed) ifc easter: 04-09 Thu (099 = 04-15 Sun) | |
1926: full moon: 03-29 Mon (088 = 04-04 Wed) easter: 04-04 Sun (094 = 04-10 Tue) ifc easter: 04-02 Fri (092 = 04-08 Sun) | |
1927: full moon: 04-17 Sun (107 = 04-23 Mon) easter: 04-17 Sun (107 = 04-23 Mon) ifc easter: 04-23 Sat (113 = 05-01 Sun) | |
1928: full moon: 04-05 Thu (096 = 04-12 Thu) easter: 04-08 Sun (099 = 04-15 Sun) ifc easter: 04-08 Sun (099 = 04-15 Sun) | |
1929: full moon: 03-25 Mon (084 = 03-28 Sat) easter: 03-31 Sun (090 = 04-06 Fri) ifc easter: 03-26 Tue (085 = 04-01 Sun) | |
1930: full moon: 04-13 Sun (103 = 04-19 Thu) easter: 04-20 Sun (110 = 04-26 Thu) ifc easter: 04-16 Wed (106 = 04-22 Sun) | |
1931: full moon: 04-02 Thu (092 = 04-08 Sun) easter: 04-05 Sun (095 = 04-11 Wed) ifc easter: 04-02 Thu (092 = 04-08 Sun) | |
1932: full moon: 03-22 Tue (082 = 03-26 Thu) easter: 03-27 Sun (087 = 04-03 Tue) ifc easter: 03-25 Fri (085 = 04-01 Sun) | |
1933: full moon: 04-10 Mon (100 = 04-16 Mon) easter: 04-16 Sun (106 = 04-22 Sun) ifc easter: 04-16 Sun (106 = 04-22 Sun) | |
1934: full moon: 03-31 Sat (090 = 04-06 Fri) easter: 04-01 Sun (091 = 04-07 Sat) ifc easter: 04-02 Mon (092 = 04-08 Sun) | |
1935: full moon: 04-18 Thu (108 = 04-24 Tue) easter: 04-21 Sun (111 = 04-27 Fri) ifc easter: 04-23 Tue (113 = 05-01 Sun) | |
1936: full moon: 04-06 Mon (097 = 04-13 Fri) easter: 04-12 Sun (103 = 04-19 Thu) ifc easter: 04-08 Wed (099 = 04-15 Sun) | |
1937: full moon: 03-26 Fri (085 = 04-01 Sun) easter: 03-28 Sun (087 = 04-03 Tue) ifc easter: 03-26 Fri (085 = 04-01 Sun) | |
1938: full moon: 04-14 Thu (104 = 04-20 Fri) easter: 04-17 Sun (107 = 04-23 Mon) ifc easter: 04-16 Sat (106 = 04-22 Sun) | |
1939: full moon: 04-04 Tue (094 = 04-10 Tue) easter: 04-09 Sun (099 = 04-15 Sun) ifc easter: 04-09 Sun (099 = 04-15 Sun) | |
1940: full moon: 03-23 Sat (083 = 03-27 Fri) easter: 03-24 Sun (084 = 03-28 Sat) ifc easter: 03-25 Mon (085 = 04-01 Sun) | |
1941: full moon: 04-11 Fri (101 = 04-17 Tue) easter: 04-13 Sun (103 = 04-19 Thu) ifc easter: 04-16 Wed (106 = 04-22 Sun) | |
1942: full moon: 04-01 Wed (091 = 04-07 Sat) easter: 04-05 Sun (095 = 04-11 Wed) ifc easter: 04-02 Thu (092 = 04-08 Sun) | |
1943: full moon: 03-21 Sun (080 = 03-24 Tue) easter: 04-25 Sun (115 = 05-03 Tue) ifc easter: 03-26 Fri (085 = 04-01 Sun) | |
1944: full moon: 04-08 Sat (099 = 04-15 Sun) easter: 04-09 Sun (100 = 04-16 Mon) ifc easter: 04-08 Sat (099 = 04-15 Sun) | |
1945: full moon: 03-28 Wed (087 = 04-03 Tue) easter: 04-01 Sun (091 = 04-07 Sat) ifc easter: 04-02 Mon (092 = 04-08 Sun) | |
1946: full moon: 04-16 Tue (106 = 04-22 Sun) easter: 04-21 Sun (111 = 04-27 Fri) ifc easter: 04-16 Tue (106 = 04-22 Sun) | |
1947: full moon: 04-05 Sat (095 = 04-11 Wed) easter: 04-06 Sun (096 = 04-12 Thu) ifc easter: 04-09 Wed (099 = 04-15 Sun) | |
1948: full moon: 03-25 Thu (085 = 04-01 Sun) easter: 03-28 Sun (088 = 04-04 Wed) ifc easter: 03-25 Thu (085 = 04-01 Sun) | |
1949: full moon: 04-13 Wed (103 = 04-19 Thu) easter: 04-17 Sun (107 = 04-23 Mon) ifc easter: 04-16 Sat (106 = 04-22 Sun) | |
1950: full moon: 04-02 Sun (092 = 04-08 Sun) easter: 04-09 Sun (099 = 04-15 Sun) ifc easter: 04-02 Sun (092 = 04-08 Sun) | |
1951: full moon: 03-23 Fri (082 = 03-26 Thu) easter: 03-25 Sun (084 = 03-28 Sat) ifc easter: 03-26 Mon (085 = 04-01 Sun) | |
1952: full moon: 04-10 Thu (101 = 04-17 Tue) easter: 04-13 Sun (104 = 04-20 Fri) ifc easter: 04-15 Tue (106 = 04-22 Sun) | |
1953: full moon: 03-30 Mon (089 = 04-05 Thu) easter: 04-05 Sun (095 = 04-11 Wed) ifc easter: 04-02 Thu (092 = 04-08 Sun) | |
1954: full moon: 04-18 Sun (108 = 04-24 Tue) easter: 04-18 Sun (108 = 04-24 Tue) ifc easter: 04-23 Fri (113 = 05-01 Sun) | |
1955: full moon: 04-07 Thu (097 = 04-13 Fri) easter: 04-10 Sun (100 = 04-16 Mon) ifc easter: 04-09 Sat (099 = 04-15 Sun) | |
1956: full moon: 03-26 Mon (086 = 04-02 Mon) easter: 04-01 Sun (092 = 04-08 Sun) ifc easter: 04-01 Sun (092 = 04-08 Sun) | |
1957: full moon: 04-14 Sun (104 = 04-20 Fri) easter: 04-21 Sun (111 = 04-27 Fri) ifc easter: 04-16 Tue (106 = 04-22 Sun) | |
1958: full moon: 04-04 Fri (094 = 04-10 Tue) easter: 04-06 Sun (096 = 04-12 Thu) ifc easter: 04-09 Wed (099 = 04-15 Sun) | |
1959: full moon: 03-24 Tue (083 = 03-27 Fri) easter: 03-29 Sun (088 = 04-04 Wed) ifc easter: 03-26 Thu (085 = 04-01 Sun) | |
1960: full moon: 04-11 Mon (102 = 04-18 Wed) easter: 04-17 Sun (108 = 04-24 Tue) ifc easter: 04-15 Fri (106 = 04-22 Sun) | |
1961: full moon: 04-01 Sat (091 = 04-07 Sat) easter: 04-02 Sun (092 = 04-08 Sun) ifc easter: 04-02 Sun (092 = 04-08 Sun) | |
1962: full moon: 03-21 Wed (080 = 03-24 Tue) easter: 04-22 Sun (112 = 04-28 Sat) ifc easter: 03-26 Mon (085 = 04-01 Sun) | |
1963: full moon: 04-09 Tue (099 = 04-15 Sun) easter: 04-14 Sun (104 = 04-20 Fri) ifc easter: 04-09 Tue (099 = 04-15 Sun) | |
1964: full moon: 03-28 Sat (088 = 04-04 Wed) easter: 03-29 Sun (089 = 04-05 Thu) ifc easter: 04-01 Wed (092 = 04-08 Sun) | |
1965: full moon: 04-15 Thu (105 = 04-21 Sat) easter: 04-18 Sun (108 = 04-24 Tue) ifc easter: 04-16 Fri (106 = 04-22 Sun) | |
1966: full moon: 04-05 Tue (095 = 04-11 Wed) easter: 04-10 Sun (100 = 04-16 Mon) ifc easter: 04-09 Sat (099 = 04-15 Sun) | |
1967: full moon: 03-26 Sun (085 = 04-01 Sun) easter: 03-26 Sun (085 = 04-01 Sun) ifc easter: 03-26 Sun (085 = 04-01 Sun) | |
1968: full moon: 04-13 Sat (104 = 04-20 Fri) easter: 04-14 Sun (105 = 04-21 Sat) ifc easter: 04-15 Mon (106 = 04-22 Sun) | |
1969: full moon: 04-02 Wed (092 = 04-08 Sun) easter: 04-06 Sun (096 = 04-12 Thu) ifc easter: 04-02 Wed (092 = 04-08 Sun) | |
1970: full moon: 03-23 Mon (082 = 03-26 Thu) easter: 03-29 Sun (088 = 04-04 Wed) ifc easter: 03-26 Thu (085 = 04-01 Sun) | |
1971: full moon: 04-10 Sat (100 = 04-16 Mon) easter: 04-11 Sun (101 = 04-17 Tue) ifc easter: 04-16 Fri (106 = 04-22 Sun) | |
1972: full moon: 03-29 Wed (089 = 04-05 Thu) easter: 04-02 Sun (093 = 04-09 Mon) ifc easter: 04-01 Sat (092 = 04-08 Sun) | |
1973: full moon: 04-17 Tue (107 = 04-23 Mon) easter: 04-22 Sun (112 = 04-28 Sat) ifc easter: 04-23 Mon (113 = 05-01 Sun) | |
1974: full moon: 04-06 Sat (096 = 04-12 Thu) easter: 04-14 Sun (104 = 04-20 Fri) ifc easter: 04-09 Tue (099 = 04-15 Sun) | |
1975: full moon: 03-27 Thu (086 = 04-02 Mon) easter: 03-30 Sun (089 = 04-05 Thu) ifc easter: 04-02 Wed (092 = 04-08 Sun) | |
1976: full moon: 04-14 Wed (105 = 04-21 Sat) easter: 04-18 Sun (109 = 04-25 Wed) ifc easter: 04-15 Thu (106 = 04-22 Sun) | |
1977: full moon: 04-04 Mon (094 = 04-10 Tue) easter: 04-10 Sun (100 = 04-16 Mon) ifc easter: 04-09 Sat (099 = 04-15 Sun) | |
1978: full moon: 03-24 Fri (083 = 03-27 Fri) easter: 03-26 Sun (085 = 04-01 Sun) ifc easter: 03-26 Sun (085 = 04-01 Sun) | |
1979: full moon: 04-12 Thu (102 = 04-18 Wed) easter: 04-15 Sun (105 = 04-21 Sat) ifc easter: 04-16 Mon (106 = 04-22 Sun) | |
1980: full moon: 03-31 Mon (091 = 04-07 Sat) easter: 04-06 Sun (097 = 04-13 Fri) ifc easter: 04-01 Tue (092 = 04-08 Sun) | |
1981: full moon: 03-20 Fri (079 = 03-23 Mon) easter: 04-19 Sun (109 = 04-25 Wed) ifc easter: 03-26 Thu (085 = 04-01 Sun) | |
1982: full moon: 04-08 Thu (098 = 04-14 Sat) easter: 04-11 Sun (101 = 04-17 Tue) ifc easter: 04-09 Fri (099 = 04-15 Sun) | |
1983: full moon: 03-28 Mon (087 = 04-03 Tue) easter: 04-03 Sun (093 = 04-09 Mon) ifc easter: 04-02 Sat (092 = 04-08 Sun) | |
1984: full moon: 04-15 Sun (106 = 04-22 Sun) easter: 04-22 Sun (113 = 05-01 Sun) ifc easter: 04-15 Sun (106 = 04-22 Sun) | |
1985: full moon: 04-05 Fri (095 = 04-11 Wed) easter: 04-07 Sun (097 = 04-13 Fri) ifc easter: 04-09 Tue (099 = 04-15 Sun) | |
1986: full moon: 03-26 Wed (085 = 04-01 Sun) easter: 03-30 Sun (089 = 04-05 Thu) ifc easter: 03-26 Wed (085 = 04-01 Sun) | |
1987: full moon: 04-14 Tue (104 = 04-20 Fri) easter: 04-19 Sun (109 = 04-25 Wed) ifc easter: 04-16 Thu (106 = 04-22 Sun) | |
1988: full moon: 04-02 Sat (093 = 04-09 Mon) easter: 04-03 Sun (094 = 04-10 Tue) ifc easter: 04-08 Fri (099 = 04-15 Sun) | |
1989: full moon: 03-22 Wed (081 = 03-25 Wed) easter: 03-26 Sun (085 = 04-01 Sun) ifc easter: 03-26 Sun (085 = 04-01 Sun) | |
1990: full moon: 04-10 Tue (100 = 04-16 Mon) easter: 04-15 Sun (105 = 04-21 Sat) ifc easter: 04-16 Mon (106 = 04-22 Sun) | |
1991: full moon: 03-30 Sat (089 = 04-05 Thu) easter: 03-31 Sun (090 = 04-06 Fri) ifc easter: 04-02 Tue (092 = 04-08 Sun) | |
1992: full moon: 04-17 Fri (108 = 04-24 Tue) easter: 04-19 Sun (110 = 04-26 Thu) ifc easter: 04-22 Wed (113 = 05-01 Sun) | |
1993: full moon: 04-06 Tue (096 = 04-12 Thu) easter: 04-11 Sun (101 = 04-17 Tue) ifc easter: 04-09 Fri (099 = 04-15 Sun) | |
1994: full moon: 03-27 Sun (086 = 04-02 Mon) easter: 04-03 Sun (093 = 04-09 Mon) ifc easter: 04-02 Sat (092 = 04-08 Sun) | |
1995: full moon: 04-15 Sat (105 = 04-21 Sat) easter: 04-16 Sun (106 = 04-22 Sun) ifc easter: 04-16 Sun (106 = 04-22 Sun) | |
1996: full moon: 04-04 Thu (095 = 04-11 Wed) easter: 04-07 Sun (098 = 04-14 Sat) ifc easter: 04-08 Mon (099 = 04-15 Sun) | |
1997: full moon: 03-24 Mon (083 = 03-27 Fri) easter: 03-30 Sun (089 = 04-05 Thu) ifc easter: 03-26 Wed (085 = 04-01 Sun) | |
1998: full moon: 04-11 Sat (101 = 04-17 Tue) easter: 04-12 Sun (102 = 04-18 Wed) ifc easter: 04-16 Thu (106 = 04-22 Sun) | |
1999: full moon: 03-31 Wed (090 = 04-06 Fri) easter: 04-04 Sun (094 = 04-10 Tue) ifc easter: 04-02 Fri (092 = 04-08 Sun) | |
2000: full moon: 04-18 Tue (109 = 04-25 Wed) easter: 04-23 Sun (114 = 05-02 Mon) ifc easter: 04-22 Sat (113 = 05-01 Sun) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment