ID: 12766
User updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Calendar related
Operating System: Linux 2.4.x
PHP Version: 4.0.6
New Comment:

Based on the documentation for the easter_days command, this behaviour would appear to 
be deliberate. It seems that the easter calculation is changed over to the Julian 
formula for all dates prior to 1753, because that is the year that Britain and its 
colonies finally switched to the Gregorian calendar. However, that does not change the 
fact that since 1582, the rest of Europe was using the Gregorian calendar.

This being the case, it would make since to be able to calculate the date of Easter 
for the range 1582-1752 using either the Julian formula (which is simply based on 
cycles of the moon) or the Gregorian formula (which is far more complex). To implement 
this, an optional switch could be added to the easter_days function which defaults to 
the Julian formula for that date range, but allows the user to specify the Gregorian 
formula instead.

Previous Comments:
------------------------------------------------------------------------

[2001-08-15 10:51:32] [EMAIL PROTECTED]

The easter_days function returns bad data for years <= 1752. Here is a way to verify. 
Because Easter always falls on a Sunday, the following function should always return 
"Sunday":

    function EasterDOW($year) {
        $jdayc = easter_days($year);
        $jdmar21 = gregoriantojd(3, 21, $year);
        $jdeaster = $jdmar21 + $jdayc;
        return JDDayOfWeek($jdeaster, 1);
    }

The formula for calculating easter has been the same since 1582. The standerd Delambre 
Easter algorithm is able to generate the date of easter for any gregorian date after 
1582. The following function may be used to duplicate the functionality of easter_days 
for any date since 1582:

    function easter_days2($year) {
    
        #First calculate the date of easter using
        #Delambre's algorithm.
        $a = $year % 19;
        $b = floor($year / 100);
        $c = $year % 100;
        $d = floor($b / 4);
        $e = $b % 4;
        $f = floor(($b + 8) / 25);
        $g = floor(($b - $f + 1) / 3);
        $h = (19 * $a + $b - $d - $g + 15) % 30;
        $i = floor($c / 4);
        $k = $c % 4;
        $l = (32 + 2 * $e + 2 * $i - $h - $k) % 7;
        $m = floor(($a + 11 * $h + 22 * $l) / 451);
        $n = ($h + $l - 7 * $m + 114);
        $month = floor($n / 31);
        $day = $n % 31 + 1;

        #Return the difference between the JulianDayCount
        #for easter and March 21'st of the same year,
        #in order to duplicate the functionality of the
        #easter_days function
        return GregorianToJD($month, $day, $year) - GregorianToJD(3,21,$year);
    }


------------------------------------------------------------------------



Edit this bug report at http://bugs.php.net/?id=12766&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to