Измина известно време, откакто писах за PHP Zmanim – работата, която свърших с него и нещата, които научих, докато го прилагах. Но въпреки закъснението винаги съм възнамерявал да продължа разговора. Това е, което правим днес.
Впървата си публикация обясних как да инсталирам и да започна с библиотеката PHP Zmanim. След това, в следващата публикация , се зарових в изчисляването на по-сложни времена и истинската сила на инструмента – прилагане на най-често срещаните равински мнения за различни zmanim. Продължавам откъдето спрях с минимално припокриване, така че ако трябва да отделите минута, за да се върнете към скоростта, поставих връзка към тези предишни публикации.
Целта днес е да проучим употребите на PHP Zmanim, които надхвърлят сравнително простото използване на библиотеката. Това включва:
Още веднъж, трябва да започна, като изразя благодарността си към хората, които направиха всичко това възможно. На първо място сред дългия списък от имена е Закари Вайкселбаум, поддържащ самата библиотека PHP Zmanim , и Елияху Хершфелд: създател на библиотеката Kosher Java, на която се основава PHP Zmanim.
Когато спряхме, имахме солиден основен PHP скрипт, който:
Изглеждаше така:
<?php 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 ), можете да изтеглите голямо разнообразие от времена. Например, за да накарам Минча Гедола да използва конкретно равинско мнение, мога да включа:
$gedolah = $zmanim->minchaGedola16Point1Degrees
В последния блог разгледах и начини за използване на метода за форматиране на PHP Zmanim, за да направя изхода по-четлив:
$gedolah = $gedolah->format('g:i a');
За тези, които не прекарват много време в синагогата (без вина, без срам, все още сте добре дошли тук) може да не е очевидно, но – въпреки името на zman – много малко организации се молят Mincha (следобед молитви) в Минча Кетана, Минча Гедола или Плаг хаМинча.
Всъщност голяма част от работата по отношение на изчисляването на времето е по-малко свързана с директното „Колко е часът Минча Гедола?“ и повече с „Колко късно през деня можем разумно да планираме Mincha, така че всеки да има време да стигне до тук след работа; но не ТОЛКОВА късно, че никой да не дойде, защото ще пропусне вечерята?“
Ако това е твърде теоретично, позволете ми да споделя логичния дженга пъзел, който моята синагога взема предвид, когато създава седмичния график:
Въпреки че всички други моменти, за които говорих в предишни блогове, все още имат значение, да се надяваме, че започвате да осъзнавате, че те имат значение по-рядко, отколкото може да се очаква.
И така, как да вземете време (като shkia/sunset) и след това да добавите или извадите минути? Ще започнем със същия скрипт, който имахме преди:
<?php 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) има методи и функции за бързо предоставяне на информация като въпросната по-горе.
Първото нещо, което трябва да разберем е, че обектът PHP Zmanim, с който работихме досега, е Zmanim обект – обект, който има набор от конкретни часове за определена дата. За неща, включващи самите дати, ние създаваме обект jewishCalendar. Добрата новина е, че е МНОГО по-лесно да се създаде. Всичко, от което се нуждаете, е година, месец и ден.
<?php 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) . '”'), ще получите:
כי תבוא
Събирайки всичко заедно:
<?php 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();
Ако датата съвпада с празника, тя ще върне „вярно“ и можете да продължите с каквато логика или процес желаете, като например показване на датата (или не).
Вярвате или не, има още какво да покриете. През следващите седмици, когато стигна до него, бих искал да покрия начини за използване на вградените астрономически функции за изчисления на времето. Вярвате или не, това наистина може да има значение от гледна точка на наличието на наистина точни часове за неща като началото и края на Шабат и празници, заедно с други празници.
Междувременно, ако има нещо друго, бихте искали да ме видите да покривам; или ако имате въпроси, корекции или поздравления, не се колебайте да ги оставите в коментарите по-долу.