Взять дату из массива

mychatik

Premium
Premium
26.05.15
429
322
mychatik.ru
#1
Возникла задача посчитать даты Пасхальных событий.
Нужно, чтобы не вписывать их каждое ежегодно заново, а привязать к дате Пасхи и рассчитывать уже автоматически.

Для этого создаём массив с датами празднования Пасхи по годам:
PHP:
$pasxa = array("2017" => "16.4", "2018" => "8.4", "2019" => "28.4", "2020" => "19.4");
Этот массив заполняем датами Пасхалии на нужный период, хоть на 100 лет.

Определяем текущий год:
PHP:
$year_now = date("Y");
Далее нужно сравнить текущий год и взять из массива соответствующее число и месяц:
PHP:
if ($year_now == ...
И вот тут у меня возникает загвоздка. Как взять число и месяц для текущего года в нужном формате, или может массив нужно делать по-другому?

Дальше, вроде как попроще...
Вычисляем дату Пасхи:
PHP:
$pasxa = strtotime($pasxa);
$pasxa_month = date("n", $pasxa);
$pasxa_day = date("j", $pasxa);
Потом рассчитываем дату Прощённого Воскресенья:
PHP:
$prowenoe = strtotime("-48 day",$pasxa);
$prowenoe_month = date("n", $prowenoe);
$prowenoe_day = date("j", $prowenoe);
Вербного Воскресенья:
PHP:
$verbnoe = strtotime("-1 week",$pasxa);
$verbnoe_month = date("n", $verbnoe);
$verbnoe_day = date("j", $verbnoe);
Вознесения:
PHP:
$voznesenie = strtotime("+39 day",$pasxa);
$voznesenie_month = date("n", $voznesenie);
$voznesenie_day = date("j", $voznesenie);
И Троицы:
PHP:
$trojtca = strtotime("+7 week",$pasxa);
$trojtca_month = date("n", $trojtca);
$trojtca_day = date("j", $trojtca);
Ну и потом, получив отдельно месяц и число каждого события - используем их дальше.

Подскажите, верно ли я представил логику кода?
И, самое главное, как всё-таки вынуть из массива нужные число и месяц по текущему году?..

P.S. В php есть очень хорошие переменные Пасхи - easter_days() и easter_date().
Но в данном случае их нельзя применить, так как они - для католической Пасхи.
А для православной, к сожалению, таких переменных нет (или я их не нашёл)...
 
Последнее редактирование:

stream

Модератор
Клиент
09.09.14
925
577
#2
Возникла задача посчитать даты Пасхальных событий.
Нужно, чтобы не вписывать их каждое ежегодно заново, а привязать к дате Пасхи и рассчитывать уже автоматически.

Для этого создаём массив с датами празднования Пасхи по годам:
PHP:
$pasxa = array("2017" => "16.4", "2018" => "8.4", "2019" => "28.4", "2020" => "19.4");
Этот массив заполняем датами Пасхалии на нужный период, хоть на 100 лет.

Определяем текущий год:
PHP:
$year_now = date("Y");
Далее нужно сравнить текущий год и взять из массива соответствующее число и месяц:
PHP:
if ($year_now == ...
И вот тут у меня возникает загвоздка. Как взять число и месяц для текущего года в нужном формате, или может массив нужно делать по-другому?

Дальше, вроде как попроще...
Вычисляем дату Пасхи:
PHP:
$pasxa = strtotime($pasxa);
$pasxa_month = date("n", $pasxa);
$pasxa_day = date("j", $pasxa);
Потом рассчитываем дату Прощённого Воскресенья:
PHP:
$prowenoe = strtotime("-48 day",$pasxa);
$prowenoe_month = date("n", $prowenoe);
$prowenoe_day = date("j", $prowenoe);
Вербного Воскресенья:
PHP:
$verbnoe = strtotime("-1 week",$pasxa);
$verbnoe_month = date("n", $verbnoe);
$verbnoe_day = date("j", $verbnoe);
Вознесения:
PHP:
$voznesenie = strtotime("+39 day",$pasxa);
$voznesenie_month = date("n", $voznesenie);
$voznesenie_day = date("j", $voznesenie);
И Троицы:
PHP:
$trojtca = strtotime("+7 week",$pasxa);
$trojtca_month = date("n", $trojtca);
$trojtca_day = date("j", $trojtca);
Ну и потом, получив отдельно месяц и число каждого события - используем их дальше.

Подскажите, верно ли я представил логику кода?
И, самое главное, как всё-таки вынуть из массива нужные число и месяц по текущему году?..

P.S. В php есть очень хорошие переменные Пасхи - easter_days() и easter_date().
Но в данном случае их нельзя применить, так как они - для католической Пасхи.
А для православной, к сожалению, таких переменных нет (или я их не нашёл)...
...Думается, можно проще сделать. Глянь по ссылкам:
❶ Как вычислить дату Пасхи :: как рассчитать дату православной пасхи :: Религиозные праздники :: KakProsto.ru: как просто сделать всё
Пасхалия. Религии — Путеводитель по Израилю
Как вычислить день Православной Пасхи по формуле Гаусса - Справочник православного человека. Часть 4. Православные посты и праздники
...Как я понял, основной принцип там формула Гаусса.
 

Rain

Администратор
Команда форума
04.09.14
334
281
28
#3
stream, жуть эта формула Гаусса. Тем более что Лет эдак на 20 можно и массив накатать.
mychatik, вот, как вариант. Только учитывай, что strtotime - возвращает дату с полуночи.
PHP:
<?php
$pasxa = array( "2016" => "1.5", "2017" => "16.4", "2018" => "8.4", "2019" => "28.4", "2020" => "19.4"
);
$curr_year = date("Y");
$curr_md = date("d.m");
if(isset($pasxa[$curr_year]) && $pasxa[$curr_year] == $curr_md)
{
}
$psx = strtotime($pasxa[$curr_year].".".$curr_year);
$prowenoe = strtotime("-48 day",$psx);
$prowenoe_month = date("n", $prowenoe);
$prowenoe_day = date("j", $prowenoe);
$verbnoe = strtotime("-1 week",$psx);
$verbnoe_month = date("n", $verbnoe);
$verbnoe_day = date("j", $verbnoe);
$voznesenie = strtotime("+39 day",$psx);
$voznesenie_month = date("n", $voznesenie);
$voznesenie_day = date("j", $voznesenie);
$trojtca = strtotime("+7 week",$psx);
$trojtca_month = date("n", $trojtca);
$trojtca_day = date("j", $trojtca);
Можно еще функцией сделать, меньше кода будет
PHP:
<?php
$pasxa = array( "2016" => "1.5", "2017" => "16.4", "2018" => "8.4", "2019" => "28.4", "2020" => "19.4"
);
$curr_year = date("Y");
$curr_md = date("d.m");
if(isset($pasxa[$curr_year]) && $pasxa[$curr_year] == $curr_md)
{
}
$psx = strtotime($pasxa[$curr_year].".".$curr_year);
function celebrates($timeoffset,$psx)
{ $celebr = strtotime($timeoffset,$psx); return array("month" => date("n", $celebr), "day" => date("j", $celebr));
}
var_dump(celebrates("+7 week",$psx)); 
 
Последнее редактирование: