Прайшло шмат часу з таго часу, як я пісаў пра 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 так, каб кожны паспеў дабрацца сюды пасля працы; але не ТАК позна, каб ніхто не прыходзіў, таму што прапусцяць абед?»
Калі гэта занадта тэарэтычна, дазвольце мне падзяліцца лагічнай галаваломкай джэнга, якую разглядае мая сінагога пры раскладзе на тыдзень:
У той час як усе іншыя выпадкі, пра якія я распавядаў у папярэдніх блогах, усё яшчэ маюць значэнне, спадзяюся, вы пачынаеце разумець, што яны маюць значэнне радзей, чым можна было чакаць.
Такім чынам, як узяць час (напрыклад, шкія/закат), а потым дадаць або адняць хвіліны? Мы пачнем з таго ж скрыпту, што і раней:
<?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";
Гэта адлюструе: כי תבוא – Кі Саво
Дакладней, які гэта дзень на іўрыце?
Як і ў папярэднім прыкладзе, мы пачынаем з 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();
Калі дата супадае са святам, вернецца «праўда», і вы можаце працягнуць любую логіку або працэс, які хочаце, напрыклад, адлюстраванне даты (ці не).
Верце ці не, але ёсць што яшчэ расказаць. У наступныя тыдні кожны раз, калі я да гэтага дабяруся, я хацеў бы асвятліць спосабы выкарыстання ўбудаваных функцый астраноміі для разлікаў часу. Верыце ці не, але гэта сапраўды можа мець значэнне з пункту гледжання дакладнага часу для такіх рэчаў, як пачатак і канец шабату і святаў, а таксама іншых абрадаў.
Тым часам, калі ёсць што-небудзь яшчэ, што вы хацелі б бачыць, каб я асвятляў; або калі ў вас ёсць пытанні, выпраўленні або хвала, не саромейцеся пакідаць іх у каментарыях ніжэй.