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

mychatik

Support
Команда форума
Регистрация
26.05.15
Сообщения
458
Реакции
369
Баллы
63
Веб-сайт
mychatik.ru
Возникла задача посчитать даты Пасхальных событий.
Нужно, чтобы не вписывать их каждое ежегодно заново, а привязать к дате Пасхи и рассчитывать уже автоматически.

Для этого создаём массив с датами празднования Пасхи по годам:
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

Support
Команда форума
Регистрация
09.09.14
Сообщения
950
Реакции
612
Баллы
93
Возникла задача посчитать даты Пасхальных событий.
Нужно, чтобы не вписывать их каждое ежегодно заново, а привязать к дате Пасхи и рассчитывать уже автоматически.

Для этого создаём массив с датами празднования Пасхи по годам:
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
Сообщения
363
Реакции
318
Баллы
63
Возраст
28
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)); 
 
Последнее редактирование:
Сверху Снизу