To compute the correct Easter date for Eastern Orthodox Churches I made a function based on the Meeus Julian algorithm:
<?php
function orthodox_eastern($year) {
$a = $year % 4;
$b = $year % 7;
$c = $year % 19;
$d = (19 * $c + 15) % 30;
$e = (2 * $a + 4 * $b - $d + 34) % 7;
$month = floor(($d + $e + 114) / 31);
$day = (($d + $e + 114) % 31) + 1;
$de = mktime(0, 0, 0, $month, $day + 13, $year);
return $de;
}
?>
easter_date
(PHP 4, PHP 5)
easter_date — Επιστροφή του UNIX timestamp για τα μεσάνυχτα του Πάσχα του δοθέντος έτους
Περιγραφή
Επιστρέφει το UNIX timestamp που αντιστοιχεί στα μεσάνυχτα του Πάσχα του δοθέντος έτους.
Από την PHP 4.3.0, η παράμετρος year είναι προαιρετική και εάν παραλείπεται δείχνει default την παρούσα χρονιά, συμφωνα με την localtime.
Warning: Αυτή η συνάρτηση θα παράξει ένα warning εάν η χρονιά είναι εκτός των ορίων του UNIX timestamp (π.χ. πριν το 1970 ή μετά το 2037).
Example#1 Παραδείγματα της easter_date()
echo date ("M-d-Y", easter_date(1999)); /* "Apr-04-1999" */
echo date ("M-d-Y", easter_date(2000)); /* "Apr-23-2000" */
echo date ("M-d-Y", easter_date(2001)); /* "Apr-15-2001" */
Η ημερομηνία της ημέρας του Πάσχα ορίστηκε, από τη Σύνοδο της Νίκαιας το 325 μ.Χ., ως η Κυριακή μετά την πρώτη πανσέληνο μετά ή στην Εαρινή Ισημερία. Η ισημερία είναι πάντα στις 21 Μαρτίου, έτσι ο υπολογισμός περιορίζεται στον υπολογισμό της ημερομηνίας της πανσέληνου και αυτής της ακόλουθης Κυριακής. Ο αλγόριθμος που χρησιμοποιείται εδώ προτάθηκε το 532, περίπου, από τον Dionysius Exiguus. Στο Ιουλιανό ημερολόγιο (για χρόνια πριν το 1753) ένας απλός κύκλος 19 χρόνων χρησιμοποιείται για τον υπολογισμό των φάσεων της Σελήνης. Στο Γραγοριανό ημερολόγιο (for years after 1753 - επινοήθηκε από τους Clavius και Lilius, εφαρμόστηκε από τον Πάπα Γρηγόριο XIII τον Οκτώβριο του 1582, και στη Βρετανία και τις αποικίες της το Σεπτέμβριο του 1752) προστέθηκαν δύο παράγοντες διόρθωσης για να κάνουν τον κύκλο πιο ακριβή.
(Ο κώδικας είναι βασισμένος σε ένα πρόγραμμα σε C του Simon Kershaw, <webmaster@ely.anglican.org>)
Ανατρέξτε επίσης στην easter_days(), για τον υπολογισμό του Πάσχα πριν το 1970 και μετά το 2037.
easter_date
12-Jun-2008 01:36
28-Jan-2008 03:50
v5.2.1 - There is a known bug with easter_date() that can return incorrect dates for some years:
<?php
// 2008 OK
echo date("D d M Y", easter_date(2008)); // Sun 23 Mar 2008
// 2009 returns Saturday
echo date("D d M Y", easter_date(2009)); // Sat 11 Apr 2009
?>
However easter_days() works correctly:
<?php
echo date("D d M Y", strtotime("2009-03-21 +".easter_days(2009)." days")); // Sun 12 Apr 2009
?>
It is apparently related to timezone settings.
I made the function like this ... works fine !
<?php
function ostern
{
$maerz21=date('z',mktime(0,0,0,3,21,$jb));
$d=((15 + $jb/100 - $jb/400 - (8 * $jb/100 + 13) / 25)%30 + 19 * ($jb%19))%30;
if ($d==29)
{
$D=28;
}
elseif($d==28 && ($jb%17)>=11)
{
$D=27;
}
else $D=$d;
$e=(2 * ($jb%4) + 4 *($jb%7) + 6 * $D + (6 + $jb/100 - $jb/400 - 2)%7)%7;
$ostersonntag=$e+$D+1+$maerz21;
return $ostersonntag;
}
?>
08-Nov-2004 08:17
The algorithm from Bigtree is correct if you add some (int) cast
<?php
function easter_date ($Year) {
/*
G is the Golden Number-1
H is 23-Epact (modulo 30)
I is the number of days from 21 March to the Paschal full moon
J is the weekday for the Paschal full moon (0=Sunday,
1=Monday, etc.)
L is the number of days from 21 March to the Sunday on or before
the Paschal full moon (a number between -6 and 28)
*/
$G = $Year % 19;
$C = (int)($Year / 100);
$H = (int)($C - (int)($C / 4) - (int)((8*$C+13) / 25) + 19*$G + 15) % 30;
$I = (int)$H - (int)($H / 28)*(1 - (int)($H / 28)*(int)(29 / ($H + 1))*((int)(21 - $G) / 11));
$J = ($Year + (int)($Year/4) + $I + 2 - $C + (int)($C/4)) % 7;
$L = $I - $J;
$m = 3 + (int)(($L + 40) / 44);
$d = $L + 28 - 31 * ((int)($m / 4));
$y = $Year;
$E = mktime(0,0,0, $m, $d, $y);
return $E;
}
?>
