Прошло некоторое время с тех пор, как я писал о PHP Zmanim — о проделанной работе и усвоенных в процессе уроках. Но несмотря на задержку, я всегда намеревался продолжить разговор. Именно этим мы и займемся сегодня.
В моем первом посте я объяснил, как установить и начать работу с библиотекой PHP Zmanim. Затем, в следующем посте, я углубился в вычисление более сложных времен и реальную мощь инструмента — применение наиболее распространенных раввинских мнений для различных зманимов. Я продолжаю с того момента, где остановился, минимизируя повторение, поэтому если вам нужно немного времени, чтобы восстановить курс дела, ссылки на предыдущие посты прилагаются.
Цель сегодняшнего дня – исследовать применение PHP Zmanim, выходящее за пределы относительно прямого использования библиотеки. Сюда входит:
- Изменение стандартного времени под конкретные случаи использования в синагоге (“Минха начинается за 25 минут до Шкии каждый день”).
- Использование функций и методов библиотеки PHP Zmanim для проведения невременных вычислений — таких как еженедельный удел Торы, еврейская дата и определение, является ли указанная дата праздником (например, Рош Ходеш или Суккот).
Благодарности
Еще раз выражаю благодарность людям, которые сделали все это возможным. Первым среди длинного списка имен стоит Закари Вейксльбаум, сопровождающий библиотеку PHP Zmanim, а также Элиягу Хершфельд, создатель библиотеки Kosher Java, на основе которой построен PHP Zmanim.
Краткое обновление
Когда мы остановились, у нас был надежный базовый PHP-скрипт, который:
- Устанавливает переменные для местоположения (широта/долгота), а также часовой пояс и высоту.
- Устанавливает дату
- Создает объект PHP Zmanim из этих переменных
- Использует встроенные методы для расчета времени, начиная от восхода солнца до минха и заката звезд
Это выглядело так:
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;
# Set variables:
$locname = "Beit Knesset Chochmat Shlomo, Beachwood, OH";
$lat = 41.4939407;
$long = -81.516709;
$elev = 0;
$tz = 'America/New_York';
$getyear = 2024;
$getday = 20;
$getmonth = 12;
$testzmanim = Zmanim::create($getyear, $getmonth, $getday, $locname, $lat, $long, $elev, $tz);
$sunrise = $testzmanim->sunrise;
echo "$sunrise\n";
Но восход солнца – это только начало. Используя любые встроенные расчеты (которые описаны на странице GitHub ReadMe), можно получить широкий спектр времени. Например, чтобы получить Минха Гдола с учетом определенного раввинского мнения, я мог бы включить:
$gedolah = $zmanim->minchaGedola16Point1Degrees
В прошлом блоге я также рассмотрел способы использования метода форматирования PHP Zmanim для улучшения читаемости вывода:
$gedolah = $gedolah->format('g:i a');
«Соль по вкусу» — Настройка времени
Для тех, кто не проводит много времени в синагоге (нет обвинений, нет стыда, вы все равно здесь приветствуетесь), это может быть не очевидно, но — несмотря на название змана — очень мало организаций молятся Минху (послеобеденные молитвы) в Минху Кетана, Минху Гдола, или Плаг хаМинха.
На самом деле, много работы по расчету времени имеет меньше отношения к прямому «во сколько Минха Гедола?» и больше к «насколько поздно днем мы можем разумно запланировать Минху, чтобы у всех было время сюда прийти после работы; но не слишком поздно, чтобы никто не пришел, потому что им придется пропустить ужин?»
Если это слишком теоретически, позвольте мне поделиться логической пазл-игрой моей синагоги, когда устанавливается еженедельное расписание:
- Зажигание свечей в пятницу вечером: Шкиа (закат) минус 18 минут
- Летняя пятничная Минха: Плаг хаМинха (используя “плагХаминхаАтеретТора”) минус 20 минут
- Зимняя пятничная Минха: Шкиа (закат) минус 22 минуты
- Субботняя Минха: Шкиа минус 40 минут
- Субботнее Маарив: Шкиа плюс 50 минут
- Закат Шаббата в субботу: Шкиа плюс 45 минут
- Будничная Минха: найти самый ранний закат на неделе, затем вычесть 17 минут
Хотя все остальные времена, о которых я рассказывал ранее в блогах, по-прежнему имеют значение, надеюсь, вы начинаете понимать, что они имеют меньшее значение, чем можно было бы ожидать.
Итак, как вы берете время (например, шкиа/закат) и затем добавляете или вычитаете минуты? Мы начнем с того же скрипта, который у нас был раньше:
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;
# Set variables:
$locname = "Beit Knesset Chochmat Shlomo, Beachwood, OH";
$lat = 41.4939407;
$long = -81.516709;
$elev = 0;
$tz = 'America/New_York';
$getyear = 2024;
$getday = 20;
$getmonth = 12;
$testzmanim = Zmanim::create($getyear, $getmonth, $getday, $locname, $lat, $long, $elev, $tz);
К этому мы добавим код для получения времени заката:
$sunset = $zmanim->sunset;
И затем вычтем 18 минут, чтобы получить время зажигания свечей:
$candles = date('g:i a', strtotime($sunset . " -18 minutes"));
Верно. Просто используйте встроенную функцию PHP для преобразования строки во время. Извините, если держал вас в напряжении. Но все действительно настолько просто.
Какая часть Торы? Какая ивритская дата? Когда Рош Ходеш?
(…и другие важные, но озадачивающие вопросы, часто задаваемые вокруг вашей синагоги.)
Вместе с расчетами дат, библиотека KosherJava (а следовательно, библиотека PHP Zmanim) имеет методы и функции для быстрого предоставления информации, подобной задаваемой вопросам выше.
Первое, что стоит понять, это то, что объект Zmanim PHP, с которым мы работали до сих пор, был объектом Zmanim — объектом, содержащим набор конкретных времен для определенной даты. Для вещей, связанных с самими датами, мы создаем объект jewishCalendar
. Хорошая новость в том, что его гораздо проще создать. Вам нужен только год, месяц и день.
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;
# Set variables:
$getyear = 2024;
$getday = 21;
$getmonth = 09;
$jewishCalendar = Zmanim::jewishCalendar(Carbon::createFromDate($getyear, $getmonth, $getday));
Теперь у нас есть объект jewishCalendar
, с которым можно работать, и использовать методы, аналогичные тем, которые мы нашли для времени. Например, предположим, что выбранная нами дата была субботой, мы можем получить часть Торы:
$format = Zmanim::format();
$parshaeng = json_decode('"' . $format->formatParsha($jewishCalendar) . '"');
(Игнорируйте настройку $format
пока. Мы к ней вернемся чуть позже).
Если вы запустили этот код, $parshaeng
дал бы вам:
Parshas Ki Savo
Вы заметите, что нам не потребовалось указывать широту, долготу, часовой пояс и т. д. Я не могу достаточно подчеркнуть, что именно эта возможность – способность получать даты, участки Торы и многое другое — делает библиотеку PHP Zmanim полезной сама по себе, даже без временных расчетов.
Могу ли я получить это на иврите?
Участок Торы? Конечно! Вот где используется строка $format
.
Сначала объяснение, что это такое: это метод, который модифицирует объекты, такие как Zmanim и jewishCalendar
, устанавливая параметры отображения и вывода. Установка Zmanim::format()
без какой-либо другой информации по умолчанию настроена на английский язык. Но затем вы можете сообщить системе, что хотите иврит с помощью этой дополнительной строки:
$format->setHebrewFormat(true)
Теперь, если вы запустите ту же строку json_decode(‘”‘ . $format->formatParsha($jewishCalendar) . ‘”‘)
, вы получите:
כי תבוא
Собираем все вместе:
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;
# Set variables:
$getyear = 2024;
$getday = 21;
$getmonth = 09;
$jewishCalendar = Zmanim::jewishCalendar(Carbon::createFromDate($getyear, $getmonth, $getday));
$format = Zmanim::format();
$parshaeng = json_decode('"' . $format->formatParsha($jewishCalendar) . '"');
$format->setHebrewFormat(true);
$parshaheb = json_decode('"' . $format->formatParsha($jewishCalendar) . '"');
echo "$parshaheb - $parshaeng\n";
Это будет отображаться: כי תבוא – Ki Savo.
Какой сегодня день?
Более конкретно, какой ИВРИТСКИЙ день сегодня?
Как и в предыдущем примере, мы начинаем с jewishCalendar
и объекта формата.
$jewishCalendar = Zmanim::jewishCalendar(Carbon::createFromDate($theyear, $themonth, $theday));
$format = Zmanim::format();
Затем мы добавляем ту же строку для установки формата на ивритский.
$format->setHebrewFormat(true);
И, наконец (и довольно просто), мы запрашиваем прямой вывод объекта календаря:
$zmandate = json_decode('"' . $format->format($jewishCalendar) . '"');
Этого буквально достаточно. Результат будет примерно таким:
17 Elul, 5784
Да, даже если мы указали setHebrewFormat
, вывод произошел на английском.
Могу ли я получить это на иврите?
Для того чтобы полностью отобразить ивритскую дату на иврите — как слова, так и буквы —, мы используем немного другой метод, называемый, как ни странно, HebrewDateFormatter
.
Предполагая (еще раз), что вы настроили ваши исходные переменные и создали объект jewishCalendar
, код для вывода даты на иврите будет следующим:
$hebformat = HebrewDateFormatter::create();
$hebformat->setHebrewFormat(true);
$hebdate = json_decode('"' . $hebformat->format($jewishCalendar) . '"');
print("Hebrew date: $hebdate\n");
Что даст вам:
Hebrew date: י״ח אלול תשפ״ד
Сегодня – это день?
Иногда вам нужно проверить, является ли определенная дата… ну, определенным днем, например, Рош Ходеш (новый месяц) или частью праздника продолжительностью несколько дней (как Суккот).
Оказывается, что это делается очень просто с помощью метода PHP Zmanim. Предполагая, что вы начали так же, как и в других примерах, после того, как вы настроили объект jewishCalendar
, это также просто, как:
$jewishCalendar->isRoshHashana();
$jewishCalendar->isSuccos();
Если дата соответствует празднику, она вернет “true”, и вы можете продолжить с любой логикой или процессом, который вам нужен, например, отображение даты (или нет).
Что дальше?
Верьте или нет, еще есть, что обсудить. В следующие недели Когда у меня на это появится время, я бы хотел рассмотреть способы использования встроенных астрономических функций для временных расчетов. Верьте или нет, это действительно важно для того, чтобы иметь действительно точные времена для вещей, таких как начало и конец Шаббата и праздников, а также других обрядов.
Тем временем, если есть еще что-то, что вы хотели бы, чтобы я рассмотрел, или если у вас есть вопросы, поправки или похвала, не стесняйтесь оставлять их в комментариях ниже.
Source:
https://dzone.com/articles/time-data-series-the-rest-of-the-story