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 от тези променливи
  • използва вградените методи за изчисляване на времето за всичко от изгрев до минча до tzeit hakochavim


Изглеждаше така:

 <?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 (залез) минус 18 минути
  • Летен петъчен минча: Plag haMincha (използвайки „plagHaminchaAteretTorah“) минус 20 минути
  • Зимен петък Минча: Шкия (залез) минус 22 минути
  • Събота Минча: Шкия минус 40 минути
  • Събота Маарив: Шкия плюс 50 минути
  • Събота край на Шабат: Шкия плюс 45 минути
  • Делничен ден Минча: намерете най-ранния шкия за седмицата, след което извадете 17 минути


Въпреки че всички други моменти, за които говорих в предишни блогове, все още имат значение, да се надяваме, че започвате да осъзнавате, че те имат значение по-рядко, отколкото може да се очаква.


И така, как да вземете време (като 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();


Ако датата съвпада с празника, тя ще върне „вярно“ и можете да продължите с каквато логика или процес желаете, като например показване на датата (или не).

И така, какво следва?

Вярвате или не, има още какво да покриете. През следващите седмици, когато стигна до него, бих искал да покрия начини за използване на вградените астрономически функции за изчисления на времето. Вярвате или не, това наистина може да има значение от гледна точка на наличието на наистина точни часове за неща като началото и края на Шабат и празници, заедно с други празници.


Междувременно, ако има нещо друго, бихте искали да ме видите да покривам; или ако имате въпроси, корекции или поздравления, не се колебайте да ги оставите в коментарите по-долу.

L O A D I N G
. . . comments & more!

About Author

Leon Adato HackerNoon profile picture
Leon Adato@leonadato
Leon has been a speaker and blogger in the monitoring and observability space for almost a decade.

ЗАКАЧВАЙТЕ ЕТИКЕТИ

ТАЗИ СТАТИЯ Е ПРЕДСТАВЕНА В...