כבר עבר זמן מאז שכתבתי על PHP Zmanim — העבודה שעשיתי איתו והדברים שלמדתי במהלך היישום שלו. אבל למרות העיכוב, תמיד כיוונתי להמשיך את השיחה. זה מה שאנחנו עושים היום.
בפוסט הראשון שלי, הסברתי איך להתקין ולהתחיל לעבוד עם ספריית PHP Zmanim. אז, בפוסט הבא, חקרתי איך לחשב זמנים יותר מורכבים ואת הכוח האמיתי של הכלי — להחיל את דעות הרבנים הכי נפוצות לזמנים שונים. אני ממשיך מאיפה שהפסקתי בקצב מינימלי של התנגשות, אז אם צריך רגע כדי להתעדכן, קישרתי לפוסטים הקודמים ההם.
המטרה היום היא לחקור שימושים של PHP Zmanim היוצאים מעבר לשימוש יחסית ישיר של הספרייה. כולל:
- לקחת זמן סטנדרטי ולהתאים אותו למקרים מיוחדים בבתי כנסת ("מנחה מתחילה 25 דקות לפני שקיעה כל יום").
- להשתמש בפונקציות ובשיטות של ספריית PHP Zmanim המספקות חישובים לא-זמניים — כמו פרשת השבוע, התאריך העברי, והאם תאריך מסוים הוא חג (כמו ראש חודש או סוכות).
תודות
שוב אני צריך להתחיל על ידי להביע את הכרת טוב לאנשים שהביאו את כל זה למציאות. בראש הרשימה הארוכה של השמות עומד זכריה וייקסלבאום, מתחזק ספריית ה-PHP Zmanim עצמה, ואליהו הרשפלד, יוצר ספריית ה-Kosher Java על פי המבוסס PHP Zmanim.
קצת עידוד
כאשר עזבנו את זה, הייתה לנו תסריט 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 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) כוללת שיטות ופונקציות לספק במהירות מידע כמו זה שנשאל למעלה.
הדבר הראשון שצריך להבין הוא שהאובייקט PHP Zmanim שעבדנו איתו עד כה היה אובייקט 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();
אם התאריך מתאים לחג, זה יחזיר "נכון" ותוכלו להמשיך עם כל הלוגיקה או התהליך שתרצו, כגון הצגת התאריך (או לא).
אז מה הבא?
אמינו או לא, עדיין יש עוד לכסות. בשבועות בהם אגיע (כשאגיע), אשמח לכסות דרכים לנצל את פונקציות האסטרונומיה המובנות לחישובי זמן. אמינו או לא, זה יכול להיות חשוב באופן אמיתי בקשר לקבלת זמנים מדויקים לדברים כמו תחילת וסיום שבת וחגים, יחד עם תקנות אחרות.
בינתיים, אם יש משהו נוסף שתרצו שאכסה או אם יש לכם שאלות, תיקונים או שבחים, נשמח אם תשאירו אותם בתגובות למטה.
Source:
https://dzone.com/articles/time-data-series-the-rest-of-the-story