paint-brush
Часавыя шэрагі даных: працяг астатняй часткі гісторыіпа@leonadato
338 чытанні
338 чытанні

Часавыя шэрагі даных: працяг астатняй часткі гісторыі

па Leon Adato7m2024/10/08
Read on Terminal Reader

Занадта доўга; Чытаць

У мінулым паведамленні ў блогу я растлумачыў, як усталяваць і пачаць працу з бібліятэкай PHP Zmanim. У далейшым я паглыбіўся ў разлік больш складаных часоў і сапраўдную моц інструмента – прымяненне найбольш распаўсюджаных равінскіх меркаванняў для розных zmanim. Я працягваю з таго месца, дзе спыніўся, з мінімальным перакрыццем, таму, калі вам спатрэбіцца хвіліна, каб вярнуцца да хуткасці, спасылкі на папярэднія паведамленні.
featured image - Часавыя шэрагі даных: працяг астатняй часткі гісторыі
Leon Adato HackerNoon profile picture

Прайшло шмат часу з таго часу, як я пісаў пра PHP Zmanim - працу, якую я зрабіў з ім, і тое, чаму я навучыўся падчас яго ўкаранення. Але, нягледзячы на затрымку, я заўсёды меў намер працягваць размову. Вось чым мы сёння займаемся.


У сваімпершым паведамленні я растлумачыў, як усталяваць і пачаць працу з бібліятэкай PHP Zmanim. Потым, у наступным пасце , я паглыбіўся ў разлік больш складаных часоў і сапраўдную моц інструмента – прымяненне найбольш распаўсюджаных равінскіх меркаванняў для розных zmanim. Я працягваю з таго месца, дзе спыніўся, з мінімальным накладаннем, таму, калі вам спатрэбіцца хвіліна, каб вярнуцца да хуткасці, я спасылаюся на гэтыя папярэднія паведамленні.


Сённяшняя мэта складаецца ў тым, каб даследаваць выкарыстанне PHP Zmanim, якое выходзіць за межы адносна простага выкарыстання бібліятэкі. Гэта ўключае ў сябе:

  • Узяцце стандартнага часу і карэкціроўка яго для канкрэтных выпадкаў выкарыстання сінагогі ("Мінча пачынаецца за 25 хвілін да Шкіі кожны дзень").


  • Выкарыстанне функцый і метадаў бібліятэкі PHP Zmanim, якія забяспечваюць вылічэнні, не звязаныя з часам, - напрыклад, штотыднёвая частка Торы, дата на іўрыце і тое, ці з'яўляецца ўказаная дата святам (напрыклад, Рош Ходэш або Сукот).

Падзяка

Яшчэ раз хачу пачаць з падзякі тым людзям, якія зрабілі ўсё гэта магчымым. У першую чаргу сярод доўгага спісу імёнаў Захары Вейксэльбаўм, які падтрымлівае бібліятэку PHP Zmanim , і Эліяху Хершфельд: стваральнік бібліятэкі Kosher Java, на якой заснаваны PHP Zmanim.

Хуткае абнаўленне

Калі мы спыніліся, у нас быў салідны базавы скрыпт PHP, які:

  • Задае зменныя для месцазнаходжання (шырата/даўгата), а таксама гадзінны пояс і вышыню.
  • Усталёўвае дату
  • стварае аб'ект PHP zmanim з гэтых зменных
  • выкарыстоўвае ўбудаваныя метады для вылічэння часу для чаго заўгодна: ад усходу сонца да мінча і да цэйт хакачавім


Выглядала гэта так:

 <?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 так, каб кожны паспеў дабрацца сюды пасля працы; але не ТАК позна, каб ніхто не прыходзіў, таму што прапусцяць абед?»


Калі гэта занадта тэарэтычна, дазвольце мне падзяліцца лагічнай галаваломкай джэнга, якую разглядае мая сінагога пры раскладзе на тыдзень:

  • Запальванне свечкі ўвечары ў пятніцу: Шкія (заход сонца) мінус 18 хвілін
  • Мінча ў летнюю пятніцу: Plag haMincha (з выкарыстаннем «plagHaminchaAteretTorah») мінус 20 хвілін
  • Мінча зімовай пятніцы: Шкія (заход) мінус 22 хвіліны
  • Субота Мінча: Шкіа мінус 40 хвілін
  • Субота Маарыў: Шкіа плюс 50 хвілін
  • Суботні канец шабату: Шкіа плюс 45 хвілін
  • Weekday Mincha: знайдзіце самы ранні шкіа на тыдні, затым адніміце 17 хвілін


У той час як усе іншыя выпадкі, пра якія я распавядаў у папярэдніх блогах, усё яшчэ маюць значэнне, спадзяюся, вы пачынаеце разумець, што яны маюць значэнне радзей, чым можна было чакаць.


Такім чынам, як узяць час (напрыклад, шкія/закат), а потым дадаць або адняць хвіліны? Мы пачнем з таго ж скрыпту, што і раней:

 <?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();


Калі дата супадае са святам, вернецца «праўда», і вы можаце працягнуць любую логіку або працэс, які хочаце, напрыклад, адлюстраванне даты (ці не).

Дык што далей?

Верце ці не, але ёсць што яшчэ расказаць. У наступныя тыдні кожны раз, калі я да гэтага дабяруся, я хацеў бы асвятліць спосабы выкарыстання ўбудаваных функцый астраноміі для разлікаў часу. Верыце ці не, але гэта сапраўды можа мець значэнне з пункту гледжання дакладнага часу для такіх рэчаў, як пачатак і канец шабату і святаў, а таксама іншых абрадаў.


Тым часам, калі ёсць што-небудзь яшчэ, што вы хацелі б бачыць, каб я асвятляў; або калі ў вас ёсць пытанні, выпраўленні або хвала, не саромейцеся пакідаць іх у каментарыях ніжэй.