SymfonyWorld Online 2022 Winter Edition

easter_date

(PHP 4, PHP 5, PHP 7, PHP 8)

easter_dateVerilen yıl için paskalya gece yarısının unix zaman damgasını döner

Açıklama

easter_date(?int $yıl = null, int $kip = CAL_EASTER_DEFAULT): int

Verilen yıl için paskalya gece yarısının unix zaman damgasını döner.

Uyarı

Bu işlev, yıl unix zaman damgasının geçerli olduğu aralık dışında (32 bitlik sistemlerde, 1970'den önce 2037'den sonra) verilirse bir uyarı üretir.

Paskalya günü, ilk olarak M.S. 325 yılında İznik Konseyi tarafından, İlk dolunaydan veya Bahar ılımından (ekinoks) sonraki ilk pazar günü olarak tanımlanmıştır. Ilımın daima 21 Mart tarihine rastladığı varsayılır ve hesaplama dolunayın ve sonraki pazar gününün hesaplanmasına indirgenir. Kullanılan algoritma Dionysius Exiguus tarafından 532 yılında tanıtıldı. Jülyen takvimi döneminde (1753'den önceki yıllar) ayın evrelerini takip etmek için basit 19 yıllık çevrim kullanıldı. Gregoryen takvimi döneminde (1753'den sonraki yıllar - Clavius ve Lilius tarafından hazırlandı ve XIII Papa Gregory tarafından Ekim 1582'de tanıtıldı, Eylül 1752'de Britanya ve kolonilerine yayıldı) çevrimin daha doğru olması için 2 düzeltme değişkeni eklendi.

Değiştirgeler

yil

1970-2037 aralığındaki değerlerden biri. Atlanırsa veya null belirtilirse yerel zamana göre geçerli yıl öntanımlıdır.

kip

CAL_EASTER_ALWAYS_JULIAN atanırsa Paskalya günlerinin Jülyen takvimine göre hesaplanmasını sağlar. Ayrıca, bkz. takvim sabitleri.

Dönen Değerler

Unix zaman damgası olarak paskalya günü.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 yıl artık null olabiliyor.

Örnekler

Örnek 1 easter_date() örneği

<?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

?>

Notlar

Bilginize:

easter_date(), PHP'nin dahili tarih ve saat işlevlerinden ziyade, sisteminizin C kütüphanesinin zaman işlevlerine dayanır. Sonuç olarak, easter_date(), PHP'nin öntanımlı saat dilimini kullanmak yerine, çalışması gereken saat dilimini belirlemek için TZ ortam değişkenini kullandığından, bu işlevi PHP'deki diğer tarih işlevleriyle birlikte kullanmak beklenmedik davranışlara neden olabilir.

Geçici bir çözüm olarak, Paskalya'nın başlangıcını PHP saat diliminizde hesaplamak için easter_days() işlevi DateTime ve DateInterval ile aşağıdaki gibi kullanılabilir:

<?php
function get_easter_datetime($year) {
    
$base = new DateTime("$year-03-21");
    
$days easter_days($year);

    return 
$base->add(new DateInterval("P{$days}D"));
}

foreach (
range(20122015) as $year) {
    
printf("Easter in %d is on %s\n",
           
$year,
           
get_easter_datetime($year)->format('F j'));
}
?>

Yukarıdaki örneğin çıktısı:

Easter in 2012 is on April 8
Easter in 2013 is on March 31
Easter in 2014 is on April 20
Easter in 2015 is on April 5

Ayrıca Bakınız

  • 1970'den önce veya 2037'den sonraki Paskalya günleri için easter_days() - Verilen yıl için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir.

add a note

User Contributed Notes 6 notes

up
26
maxie
14 years ago
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;
}
?>
up
5
Alexander Bliznyuk
4 years ago
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
up
10
py dot lebecq at gmail dot com
12 years ago
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(0, 0, 0, 11$year),  // 1er janvier
   
mktime(0, 0, 0, 51$year),  // Fête du travail
   
mktime(0, 0, 0, 58$year),  // Victoire des alliés
   
mktime(0, 0, 0, 714, $year),  // Fête nationale
   
mktime(0, 0, 0, 815, $year),  // Assomption
   
mktime(0, 0, 0, 11, 1$year),  // Toussaint
   
mktime(0, 0, 0, 11, 11, $year),  // Armistice
   
mktime(0, 0, 0, 12, 25, $year),  // Noel

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

 
sort($holidays);
 
  return
$holidays;
}
?>
up
2
Guillaume Dufrene
9 years ago
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.
up
0
phpuser
17 years ago
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;

   }
?>
up
-1
adwil at live dot com
8 years ago
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==0 || $weekDay==6 || in_array(date('m-d',$date1),$hol)))
               
$i++;

           
$date1=strtotime('+1 day',$date1);
        }
        return
date('Y-m-d',$date1);
    }
?>
To Top