הכרת תודה
בבלוג זה, אני מסביר מושגים וטכניקות הקשורים לדרך חישוב הזמנים המכונים "זמנים יהודיים" (זמנים); כמו גם לטכניקות הנחוצות לשימוש בספריית PHP Zmanim – ספרייה של פונקציות המאפשרות לך לחשב בקלות זמנים יהודיים.
ספריית PHPZmanim מתוחכמת על ידי זכריה וקסל באום. כמו רבות מהדברים בטכנולוגיה כיום, PHP Zmanim מבוסס על הבסיס ספריית Java הקודש של אליהו הרשפלד. אני חייב תודה עצומה לזכריה ולאליהו – לא רק על העבודה שהם השקיעו בפיתוח הספריות אלא גם על התמיכה שהם הספיקו לי כשהגעתי למפות על ההלכה הטכנית והרוחנית הנחוצה לשימוש.
מבוא
"באיזו שעה תהיה תפילת הצהריים (מנחה) השבוע?" הוא שאלה מורכבת באופן מפתיע. זה מפתיע כי "תפילת הצהריים" נראה ברור מאליו, אבל (כמו רבות הקשורים לחוקי הדת היהודית (הלכה), יש רבות של רקע, פירוש וסגנון מפורט שדרוש לכך.
הערה: אם אתה כבר נוח עם מושגי הזמן היהודי (זמנים), אל תהסס לדלג לפרק המסומן "התקנת PHP Zmanim". לא ארצח ולא אחריב עליך.
קשה להבין את החשיבות של חישובי הזמן המדויקים ביום, השבוע ובחיים הדתיים היהודיים. זה נכנס לכל דבר ממתי מתחיל ונגמר הצום עד לרגע שמאחר ומוקדם מדי לבקש תפילות מסוימות ולרגע שפשוט להחזיק (שלא לדבר על אכילה) ברות חטים אסור.
כדי לנסח זאת בדרך אחרת, אשתף ציטוט מרבי אברהם יהושע העשיל בספרו "שבת".
המשמעות של שבת היא לחגוג את הזמן ולא את המרחב. שישה ימים בשבוע אנו חיים תחת העריריות של דברים של מרחב; בשבת אנו מנסים להתאים את עצמנו לקדושה בזמן.
Rabbi Abraham Joshua Heschel, “The Sabbath”
אפילו עם ההסבר הזה, יתכן שחלק מהקוראים יהיו בספקנים, "למה לעשות עניין כזה גדול מזה? האם אתה אומר לי שהאלוהים יחשיב את זה כאשר אתה מוזר ב-5 דקות?"
זו שאלה תקפה, ושווה את הרגע של הדיון כי אחרת הצורך, שלא לדבר על ההשפעה של, בלוג זה (והשיטות והטכנולוגיות שהוא מתאר) מופחת.
לא, כמובן, האלוהים לא מתעניין. בדיוק כמו שמאמן הספורט שלי לא "מתעניין" אם אני מתחמם לפני הריצה, עושה את האימונים בזמן ההתחלה, או שותה מספיק מים. בואו נודה בזה: לא משנה כמה קשה אני אימון, המאמן שלי לא יהיה בריא יותר. עם זאת, המאמן שלי – שאכפתי ממני מעבר לביצועים שלי במרוץ הבא, רוצה שאכפתי. הם רוצים שאהיה מחויב לחלוטין, אם רק כי הם יודעים שהחוויה שלי תהיה מלאה יותר בגלל זה.
באותו אופן, לאלוהים אין "דאגה". אבל אנו יודעים (דרך כתבי המקרא והתלמוד) שאלוהים רוצה שאנו נדאג. וכך חכמי היהדות במשך הדורות ניסו – באמצעות הראיות המוצגות בטקסט – להימנע מתשובות פשוטות ופשטניות, ולחדור עמוק יותר כדי לחשוף את הפרטים.
חזרה לשאלה שלנו: "באיזו שעה מתפללים בצהריים?" כדי להבין זאת, עלינו קודם כל להבין מה מגדיר "יום" (לעומת "לילה"); איך להבין את ההפרדה שמפרידה בין "בוקר" לבין "צהריים"; איך לחלק את היום לחלקים; ועוד כל כך הרבה.
בעוד שבלוג זה יציג כמה מהמושגים והמונחים הללו כפי שתהיה הצורך, אסור לחשוב עליו כממחיש את כל הנושא.
זה לא מפתיע שמחשבים עשו עבודה מהירה בחישוב השעות הללו, ועכשיו יש מגוון רחב של אתרים ויישומים שמוכנים לעשות זאת עבורנו. אפילו עבור אלו שרוצים ליצור את התוכניות שלהם כדי לבצע את החישובים הללו, ישנן פתרונות שמצילים זמן בצורת ספריות קוד כמו KosherJava והמשמשים הרבים שלה, כולל PHP, Swift, .Net, JavaScript, Python, ועוד רבים אחרים.
לכן, חשוב להבין את התיאוריה מאחורי הכלים. כל מי שמעוניין ליצור אתר או אפליקציה חייב להבטיח שהתוכנה שלו אינה מעניקה בטעות זמנים שגויים. אמנם, כפי שציינו קודם, אף אחד לא "יצא לגיהינום" (כביכול) על שהתפלל בזמן לא נכון, עם זאת קיים מצווה קשה:
וְלִפְנֵ֣י עִוֵּ֔ר לֹ֥א תִתֵּ֖ן מִכְשֹׁ֑ל וְיָרֵ֥אתָ מֵּאֱלֹהֶ֖יךָ
“לפני עור לא תתן מכשל ויראת מאלהיך”
“אל תשים מכשול לעיוור”(Leviticus 19:14)
אחד זה אם אדם טועה בטעות. זה דבר אחר לספק מידע פסול שגורם לאדם (או גרוע יותר, להרבה אנשים) לעשות טעות, באמונה שהמידע שקיבלו (מהאפליקציה שלך) היה מדויק ואמין.
הזמנים הבסיסיים
בהתחשב בכך, נתחיל בהבנת הזמנים שהם די פשוטים והכי פחות מושפעים מהבדלים במסורת היהודית:
- זריחת השמש (נץ החמה) היא זריחה ימית רגילה – הרגע שבו הקצה העליון של דיסק השמש גורם לאורך האופק.
- שקיעת השמש (שקיעה) היא הצד השני של המטבע היומי – הרגע שבו הקצה העליון של השמש נופל מתחת לאופק.
- A “seasonal hour” (sha’ah) refers to the even division of daylight, the time between sunrise and sunset. There are always 12 seasonal hours, but they may be longer or shorter than a regular (on your clock) hour because the amount of daylight fluctuates with the season.
- שים לב שחלק מהמסורות מחשבות שעה כ-12 חלקים של הזמן מעלות השחר (עלות השחר, או פשוט "עלות" כשאור נראה מעל האופק, אך לפני זריחת השמש עצמה) עד לילה (צאת הכוכבים, או פשוט "צאת", כשאין אור נראה מעל האופק, אחרי שקיעת השמש). ניכנס יותר לעלות (עלות) ולילה (צאת) בהמשך בבלוג.
- דקות עוניות (שעות זמניות) הן 1/60 משעה עונית ו, בדיוק כמו שעה עונית, עשויות להיות גדולות או קטנות יותר מדקה בשעונך.
כפי שאפשר לראות, עלית השמש ושקיעה מהוות את הליבה העיקרית של כל חישובי הזמן האחרים, ומספר רב של זמנים יהודיים חשובים במהלך היום נבעו ישירות מאלו. לדוגמה, בכמה מסורות, תמצא:
- שבת מתחילה בערב שישי, 18 דקות לפני שקיעה (שקיעה)
- שבת מסתיימת בערב שבת 45 (או 50, או 72) דקות לאחר שקיעה (שקיעה)
- …וכן הלאה.
חישובים שבהם "זה מסובך"
ברגע שאתה מבוסס עלית השמש ושקיעה, השלב הבא הוא לזהות את שני הזמנים הקריטיים של עלית השחר והלילה. עלית השחר (אלות השחר, או פשוט "אלות") והלילה (צאת הכוכבים, או פשוט "צאת") משקפים אחד את השני כמו שעלית השמש ושקיעה עושים. עלית השחר היא הרגע שבו אור (אך לא השמש) נראה מעל לאופק. הלילה הוא הרגע שבו אור אינו נראה יותר.
למרבה הצער, האם יש או אין "אור" הוא מאוד סובייקטיבי, ולכן הדרך בה הוא התבסס על כך משתנה ברחבי המפה.
- כמה מסורות משתמשות במספר קבוע של דקות שעון לפני עלית השמש או אחרי שקיעה.
- אחרים ישתמשו באסטרונומיה לזיהוי הזמן שבו השמש נמצאת מתחת לאופק במספר מסוים של מעלות.
- אחרים ישתמשו בנוסחה, כגון לקחת את כמות האור היום (מעלית השמש לשקיעה), לחלק אותו ל-10 חלקים שווים, ואז לחסר מכמות זו מעלית השמש או להוסיף אותה לשקיעה.
- עם זאת, אחרים יקחו את הזמן שהשמש מתחת לאופק ביום "שווה" (כלומר באיקסון האביב או הסתיו, כשכמות האור והחשיכה זהה בדיוק), יחשבו את ההפרש בדקות שעון בין הזמן הזה לשמש, יכינו את הדקות האלה ביחס ל"דקות עונתיות" ("שעות זמנית") ליום מסוים בפועל, ולבסוף יחסרו כמות זו משקיעת השמש (או יוסיפו אותה לשקיעת השמש) ליום מסוים.
נשמע מבלבל? כפי שכותרת הסעיף זה אומרת, "זה מורכב."
הנקודה שלי בתיאור אלה אינה להכריע על חישוב "נכון" יחיד, אלא לעזור לך להבין את המטרה הסופית של כל סוג חישוב – כמו גם עבורך להבין שיש דרכים רבות שבהן מסורות יהודיות שונות מגיעות לכל חישוב.
הזמנים המורכבים
ברגע שיש לך את השחרור (אלות), שקיעת השמש (נץ), שקיעת השמש (שקיה) והלילה (צאת), ניתן לחשב זמנים חשובים נוספים במשך היום. כוללים:
- הזמן המוקדם ביותר לתפילות הצהרים (מנחה גדולה), שלעתים קרובות מחושב כמספר מסוים של שעות עונתיות (שעה) לאחר השחרור או שקיעת השמש. הנקודה בזמן זה היא שזו הרגע המוקדם ביותר שבו "אחר הצהריים" (פשוטו כמשמעו, אחר האמצע של היום) קורה.
- הזמן המועדף לתפילות הצהרים (מנחה קטנה), שמחושב כמספר גדול יותר של שעות עונתיות (שעה) לאחר שקיעת השמש (נץ) או השחרור (אלות). הנקודה כאן היא שזה יותר מ-3/4 מהיום, כשזה ברור שזו הצהריים – אך מבלי לקחת סיכון שזה בכל פעם יהיה לילה (צאת).
- הזמן האחרון לתפילת הצהריים (פלג המנחה, או "פלג"), שלעתים קרובות מחושב כהזמן שבין הזמן הטוב ביותר לתפילת הצהריים (מנחה קטנה) ועד לילה (צאת).
למרות שיש כמה זמנים מפתח אחרים שנגיע אליהם בבלוג אחר, אלה מספיקים כדי להתחיל.
התקנת ספריית PHP Zmanim
אחרי שדייקנו בפרטים הטכניים, אנו יכולים כעת לעבור ל… פרטים טכניים! רק שהפעם הם פרטים טכניים טכניים. (ועבור אלו מהאנשים שדלגו מהמבוא כל הדרך לסעיף זה, ברוך הבא! זה נהדר שחזרתם!)
PHP Zmanim היא ספרייה מורכבת המכילה לא רק את הייבוא של Kosher Java לשפת PHP אלא גם כמה מודולים תומכים כמו Carbon (כלי העוזר להפוך את השינויים בתאריך ובשעה למהירים יותר, קלים יותר ומדויקים יותר); Symfony (מסגרת עיצוב אינטרנט); ועוד כמה כלים קטנים אחרים.
הנקודה היא, כל המודולים הללו פועלים בשיתוף פעולה עם PHP Zmanim ואתה זקוק לכולם כדי שמשהו יעבוד. הדרך הקלה ביותר להתקין את כולם היא באמצעות כלי PHP "composer" המנוהל תלויות.
אם אתה צריך להפעיל את PHP Zmanim על שרת אינטרנט ואין לך גישה להריץ אינסטלטורים בשורת הפקודה, אתה עדיין במזל. פשוט העתק את הספרייה ./vendor מהתקנה מקומית, ו- עם כמה התייחסויות – זה יעבוד.
מהן האזהרות הללו? האחת העיקרית היא לוודא שגירסת ה-PHP שמשתמשים בה בספק התוכנה שלכם תואמת לגירסה שאתם משתמשים בה בעת התקנה דרך Composer.
זה מביא אותי לפקודת ההתקנה האמיתית של Composer. אני יודע שעוד לא הגענו לבעיטות עיקריות, אבל בואו נקבע תיקייה בה יהיו התוכנות. עבור הבלוג הזה, אני אקרא לה /phpzmanim_test.
בחלון המסוף, עברו לתיקייה זו:
cd /php zmanim_test
עכשיו הקלדו את הפקודה:
composer -V
(שימו לב שזו אות ראשונית V)
זה יאשר אם Composer מותקן או לא. אם לא, עשו חיפוש מהיר כדי לגלות את הדרך הטובה ביותר להתקין אותו במערכת ההפעלה שלכם.
לאחר מכן, הקלדו את הפקודה:composer require zachweix/php-zmanim
זה יעשה שני דברים:
- ראשית, זה ייצור את הקובץ
composer.json
בתיקייה הנוכחית, עם הוראות ש-PHP Zmanim צריך להתקבל. - זה ממש מתקין את PHP Zmanim בשבילכם לתיקייה ./vendor בתוך התיקייה הנוכחית. אין צורך בצעדים נוספים.
הדבר היחיד נוסף הקשור ל-Composer שיש לציין הוא שאם תצטרכו לעדכן, תוכלו לעשות זאת בקלות על ידי היכנסות לתיקייה /phpzmanim_test (או מה שקראתם לשלכם) והקלדת הפקודה composer update
. זה יקרא את המידע בקובץ composer.json, ויעדכן את כל מה שהוא מוצא שם.
(מפיצים סופרים: זה אומר שאסור למחוק את קובץ composer.json. אבל אינכם חייבים להעתיק אותו לאתר המרחקי שלכם עם שאר היישומים אם אינכם רוצים.)
ברגע שזה נעשה, אתה צריך לכלול את השורה הבאה בכל תסריט PHP שישתמש בספריית PHP Zmanim:
require 'vendor/autoload.php';
התחלה עם PHP Zmanim
עכשיו שהתקנת PHP Zmanim, אתה מוכן להתחיל לכתוב קצת קוד עם זה.
כדי לעשות זאת, תחשב קודם כן אובייקט PHP – אוסף (מערך, בעצם) של נתונים שמועברים לפונקציות שונות. אובייקט זה מכיל גם את התאריך הספציפי לשעות שתרצה למשוך וגם את המידע המדויק על המיקום.
יצירת אובייקט עם "Zmanim::Create()"
לפני שתתחיל, תצטרך לדעת מספר דברים על המיקום בו אתה מבקש שעות:
- הקווים הרוחבי והאורך.
- את זמן האזור, מתורגמן באמצעות פורמט הבסיס נתונים של זמנים (דוגמא:
"אמריקה/ניו_יורק"
). - הגובה של המיקום שם, אם אתה בוחר להשתמש בו. (ספוילר: מדי פעם הגובה משתתף בחישובים אלה.)
- השנה, החודש, והיום של השעות שתחשב.
הפורמט ליצירת האובייקט שלך הוא כדלקמן:
$VARNAME = Zmanim::create(YEAR, MONTH, DAY, "NAME OF LOCATION", LATITUDE, LONGITUDE, ELEVATION, "TIME ZONE");
הנה דוגמא ספציפית:
$zmanim = Zmanim::create(2019, 2, 21, "New York City", 40.850519, -73.929214, 200, "America/New_York");
איך זה נראה כתסריט עם כמה משתנים במקום הקלט הפורמלי:
<?php
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;
$getdate = date('Y-m-d');
$getyear = date('Y', strtotime($getdate));
$getmonth = date('m', strtotime($getdate));
$getday = date('d', strtotime($getdate));
$locname = "Beit Knesset Chochmat Shlomo, Beachwood, OH";
$lat = 41.4939407;
$long = -81.516709;
$elev = 0;
$tz = 'America/New_York';
$zmanim = Zmanim::create($getyear, $getmonth, $getday, $locname, $lat, $long, $elev, $tz);
עם הקוד הזה במקום, יש לך אובייקט לתאריך היום למיקום המסוים. אפשר אפילו להדפיס אותו באמצעות פונקצית PHP print_r()
:
print_r($zmanim);
מה שאמור לתת לך פלט שנראה משהו כזה:
PhpZmanim\Zmanim Object
(
[calendar:PhpZmanim\Calendar\AstronomicalCalendar:private] => Carbon\Carbon Object
(
[endOfTime:protected] =>
[startOfTime:protected] =>
[constructedObjectId:protected] => 00000000000000080000000000000000
[localMonthsOverflow:protected] =>
[localYearsOverflow:protected] =>
[localStrictModeEnabled:protected] =>
[localHumanDiffOptions:protected] =>
[localToStringFormat:protected] =>
[localSerializer:protected] =>
[localMacros:protected] =>
[localGenericMacros:protected] =>
[localFormatFunction:protected] =>
[localTranslator:protected] =>
[dumpProperties:protected] => Array
(
[0] => date
[1] => timezone_type
[2] => timezone
)
(יש עוד, אבל אתה מבין את הרעיון).
קבלת הזמן האמיתי הראשון – שקיעה (Netz HaHachma)
ברגע שיש לך אובייקט נבנה, להשתמש בו כדי לקבל זמנים ספציפיים באמצעות PHP Zmanim הוא כמעט קל. קבלת זמן השחר היא פשוטה ככה:
$sunrise = $zmanim->sunrise;
אם אינך מכיר או לא נטלת בה לפני, הסמל ->
מציין שאתה משתמש באובייקט (שוב, אוסף של אלמנטי נתונים) או בשיטה מובנת
זה יחזיר משהו שנראה ככה:
2024-12-20 07:48:52
למי שעוקב, הקוד המלא עד כה נראה כך:
sunrise;
echo "$sunrise\n";
?>
סיכום
יש עוד הרבה לכסות ב- PHP Zmanim, שאני מתכנן לעשות בשבועות הבאים. אבל זה צריך לספק לך לפחות התחלה עם בניית תסריט PHP מבוסס או אתר אינטרנט והצגת זמנים מדויקים לרגעים יהודיים.
כמו תמיד, אני מאשר שאלות, תיקונים והודאות בתגובות למטה.
Source:
https://dzone.com/articles/time-data-series-getting-started-with-php-zmanim