PHP.mk документација

easter_date

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.easter-date.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.easter-date.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
easter_date

Референца за `function.easter-date.php` со подобрена типографија и навигација.

function.easter-date.php

easter_date

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

easter_dateДобијте Unix временски печат за локално полноќ на Велигден за дадена година

= NULL

easter_date(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int

Враќа Unix временски печат што одговара на полноќ на Велигден за дадената година.

Датумот на Велигден е дефиниран од Советот во Никеја во 325 година како Недела по првата полна месечина што паѓа на или по Пролетната рамнодневница. Рамнодневницата се претпоставува дека секогаш паѓа на 21 март, така што пресметката се сведува на одредување на датумот на полната месечина и датумот на следната Недела. Алгоритмот што се користи овде е воведен околу 532 година од страна на Дионисиј Екзигус. Според Јулијанскиот календар (за години пред 1753) се користи едноставен 19-годишен циклус за следење на фазите на Месечината. Според Грегоријанскиот календар (за години по 1753 - измислен од Клавиус и Лилиус, и воведен од Папата Григориј XIII во октомври 1582 година, и во Британија и нејзините тогашни колонии во септември 1752 година) се додаваат два корективни фактори за да се направи циклусот попрецизен.

Параметри

year

Годината мора да биде број помеѓу 1970 и 2037 за 32-битни системи, или помеѓу 1970 и 2.000.000.000 за 64-битни системи. Ако е изоставен или null, стандардно се зема тековната година според локалното време.

mode

Овозможува пресметување на датумите на Велигден врз основа на Јулијанскиот календар кога е поставено на CAL_EASTER_ALWAYS_JULIAN. Погледнете исто така константи на календарот.

Вратени вредности

Датумот на Велигден како unix временски печат.

Errors/Exceptions

А ValueError се фрла ако годината е порано од 1970 или подоцна од 2037 кога работи на 32-битен систем, или подоцна од 2.000.000.000 на 64-битен систем.

Дневник на промени

Верзија = NULL
8.3.0 На 64-битни системи, year параметарот сега прифаќа вредности во опсег од 1970 до 2.000.000.000.
8.0.0 year сега е null.
8.0.0 А ValueError се фрла кога year е надвор од дозволениот опсег. Претходно, E_WARNING беше подигнато и функцијата врати false.

Примери

Пример #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

?>

Пример #2 Користење easter_date() with DateTime

<?php

$timestamp
= easter_date(2023);

$datetime = new \DateTime();
$datetime->setTimestamp($timestamp);

echo
$datetime->format('M-d-Y'); // Apr-09-2023

?>

Белешки

Забелешка:

easter_date() се потпира на функциите за време на C библиотеката на вашиот систем, наместо да користи внатрешни функции за датум и време на PHP. Како последица на тоа, easter_date() користи TZ променлива на околината за да го одреди временскиот појас во кој треба да работи, наместо да го користи стандардниот временски појас на PHP , што може да резултира со неочекувано однесување кога се користи оваа функција во комбинација со други функции за датум во PHP.Како заобиколно решение, можете да го користите

за да го пресметате почетокот на Велигден во вашиот PHP временски појас на следниов начин: easter_days() with DateTime and DateInterval to calculate the start of Easter in your PHP time zone as follows:

<?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(2012, 2015) as $year) {
printf("Easter in %d is on %s\n",
$year,
get_easter_datetime($year)->format('F j'));
}
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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

Види Исто така

  • easter_days() - Добијте број на денови по 21 март на кој паѓа Велигден за дадена година - Земи го бројот на денови по 21 март на кој паѓа Велигден за дадена година

Белешки од корисници 6 белешки

maxie
пред 17 години
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;
}
?>
за пресметување на Велигден пред 1970 или по 2037 година
пред 8 години
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
Александар Близниук
пред 16 години
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, 1,  1,  $year),  // 1er janvier
    mktime(0, 0, 0, 5,  1,  $year),  // Fête du travail
    mktime(0, 0, 0, 5,  8,  $year),  // Victoire des alliés
    mktime(0, 0, 0, 7,  14, $year),  // Fête nationale
    mktime(0, 0, 0, 8,  15, $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;
}
?>
py dot lebecq at gmail dot com
12 години пред
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.
phpuser
21 години пред
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; 

   } 
?>
Гијом Дуфрен
пред 11 години
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);
    }
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.