easter_date

(PHP 4, PHP 5)

easter_date — Get Unix timestamp for midnight on Easter of a given year

Описание

int easter_date ([ int $year ] )

Returns the Unix timestamp corresponding to midnight on Easter of the given year.

Внимание

This function will generate a warning if the year is outside of the range for Unix timestamps (i.e. before 1970 or after 2037).

The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate.

(The code is based on a C program by Simon Kershaw, <webmaster at ely.anglican dot org>)

Список параметров

year

The year as a number between 1970 an 2037

Возвращаемые значения

The easter date as a unix timestamp.

Список изменений

Версия Описание
Since 4.3.0 The year parameter is optional and defaults to the current year according to the local time if omitted.

Примеры

Пример #1 easter_date() example

<?php

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

?>

Смотрите также

Коментарии

Автор:
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)*(- (int)($H 28)*(int)(29 / ($H 1))*((int)(21 $G) / 11)); 
         
$J = ($Year + (int)($Year/4) + $I $C + (int)($C/4)) % 7
         
$L $I $J
         
$m + (int)(($L 40) / 44); 
         
$d $L 28 31 * ((int)($m 4)); 
         
$y $Year
         
$E mktime(0,0,0$m$d$y); 

         return 
$E

   } 
?>
2004-11-08 10:17:16
http://php5.kiev.ua/manual/ru/function.easter-date.html
Автор:
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 = ($a $b $d 34) % 7;
   
$month floor(($d $e 114) / 31);
   
$day = (($d $e 114) % 31) + 1;
   
   
$de mktime(000$month$day 13$year);
   
    return 
$de;
}
?>
2008-06-12 04:36:46
http://php5.kiev.ua/manual/ru/function.easter-date.html
I recently had to write a function that allows me to know if today is a holiday.

And in France, we have some holidays which depends on the easter date. Maybe this will be helpful to someone.

Just modify in the $holidays array the actual holidays dates of your country.

<?php
/**
 * This function returns an array of timestamp corresponding to french holidays
 */
protected static function getHolidays($year null)
{
  if (
$year === null)
  {
   
$year intval(date('Y'));
  }
   
 
$easterDate  easter_date($year);
 
$easterDay   date('j'$easterDate);
 
$easterMonth date('n'$easterDate);
 
$easterYear   date('Y'$easterDate);

 
$holidays = array(
   
// These days have a fixed date
   
mktime(00011$year),  // 1er janvier
   
mktime(00051$year),  // Fête du travail
   
mktime(00058$year),  // Victoire des alliés
   
mktime(000714$year),  // Fête nationale
   
mktime(000815$year),  // Assomption
   
mktime(000111$year),  // Toussaint
   
mktime(0001111$year),  // Armistice
   
mktime(0001225$year),  // Noel

    // These days have a date depending on easter
   
mktime(000$easterMonth$easterDay 2$easterYear),
   
mktime(000$easterMonth$easterDay 40$easterYear),
   
mktime(000$easterMonth$easterDay 50$easterYear),
  );

 
sort($holidays);
 
  return 
$holidays;
}
?>
2010-03-11 09:44:45
http://php5.kiev.ua/manual/ru/function.easter-date.html
Автор:
I found a problem with holidays timestamp computation and daylight saving time.
An article about it at http://goo.gl/76t31 (in french only, sorry).

In summary, this year (2013) easter begins before adding an hour for daylight saving time (occured sunday at 3:00). It means that if you do $easter + X, where x is a number of seconds equivalent to one day, 39 days or 50 days, the result is not equals to a midnight timestamp...

Here a function to check if a midnight timestamp is equals to an holiday :

function isHoliday( $ts ) {
// Licence : Creative Commons (BY)
// By Webpulser - http://goo.gl/76t31
  $fixed_holidays = array( ’01-01′, ’01-05′, ’08-05′, ’14-07′, ’15-08′, ’11-11′, ’25-12′ );
  $format = ‘d-m’;

 $dm = date($format, $ts);
  if ( in_array($dm, $fixed_holidays) ) return true;

 $easter = easter_date( date(‘Y’, $ts) );
  if ( date($format, $easter +   86400) == $dm ) return true;
  if ( date($format, $easter + 3369600) == $dm ) return true;
  if ( date($format, $easter + 4320000) == $dm ) return true;

 return false;
}

feel free to use / modify.
2013-03-30 10:13:56
http://php5.kiev.ua/manual/ru/function.easter-date.html
Hey, recently I needed a function to get realization dates in online shop, so here it is (ready to go for polish users, please adjust your dates for any other country):

<?php
function getWorkday($date1,$workDays) {
       
$workDays = (int)$workDays;
        if (
$workDays <= 0)
            return 
null;

       
$date1=strtotime('-1 day',strtotime($date1));

       
$lastYear null;
       
$hol=array('01-01','01-06','05-01','05-03','08-15','11-01','11-11','12-25','12-26');  //array of month-date of static holidays (these are from Poland)
       
$i 0;
        while (
$i<=$workDays) {
           
$year date('Y'$date1);
            if (
$year !== $lastYear){
               
$lastYear $year;
               
$easter date('m-d'easter_date($year));
               
$date strtotime($year '-' $easter); // easter
               
$easterSec date('m-d'strtotime('+1 day'$date)); // easter monday
               
$greens date('m-d'strtotime('+49 days'$date)); // zielone swiatki
               
$cc date('m-d'strtotime('+60 days'$date)); // boze cialo
               
$hol[] = $easter;
               
$hol[] = $easterSec;
               
$hol[] = $greens;
               
$hol[] = $cc;
            }
           
$weekDay=date('w',$date1);
            if (!(
$weekDay==|| $weekDay==|| in_array(date('m-d',$date1),$hol)))
               
$i++;

           
$date1=strtotime('+1 day',$date1);
        }
        return 
date('Y-m-d',$date1);
    }
?>
2014-04-10 18:01:22
http://php5.kiev.ua/manual/ru/function.easter-date.html
Автор:
Thank you, @Maxie, for algorythm for computing Orthodox Easter date.
It can be improved though. You added 13 days in order to map Julian calendar to Gregorian.  But 13 days is not a constant. It's an accumulated error fixed in Gregorian and should be calculated with this formula: (int)($year / 100) - (int)($year / 400) - 2
2017-08-24 01:02:42
http://php5.kiev.ua/manual/ru/function.easter-date.html

    Поддержать сайт на родительском проекте КГБ