الشكر والتقدير
في هذا المقال، أشرح المفاهيم والتقنيات المتعلقة بكيفية حساب ما يسمى “الأوقات اليهودية” (زمانيم)؛ وكذلك التقنيات اللازمة لاستخدام مكتبة PHP Zmanim – مكتبة من الوظائف التي تتيح لك حساب الأوقات اليهودية بسهولة.
تتم صيانة مكتبة PHPZmanim بواسطة زكريا ويكسلباوم. كما هو الحال مع العديد من الأشياء في التكنولوجيا اليوم، فإن PHP Zmanim يعتمد نفسه على مكتبة Kosher Java الأساسية التي طورها إيلياهو هيرشفيلد. أدين بدين كبير لكل من زكريا وإيلياهو – ليس فقط على العمل الذي بذلوه في تطوير هذه المكتبات ولكن أيضاً على الدعم الذي قدموه لي أثناء تعلمي لكل من المبادئ التقنية والقواعد الدينية اليهودية (الهلاك) اللازمة لاستخدامها.
مقدمة
“متى ستكون صلاة العصر (منتح) هذا الأسبوع؟” هو سؤال معقد بشكل مضلل. الأمر مضلل لأن “صلاة العصر” تبدو واضحة، ولكن (كما هو الحال مع العديد من الأشياء المتعلقة بقواعد الدين اليهودي (الهلاك)، هناك كمية هائلة من الخلفية، والتعليقات، والتفصيل المطلوب.
ملاحظة: إذا كنت مرتاحًا بالفعل مع مفاهيم الوقت اليهودي (زمانيم)، فلا تتردد في تخطي القسم المسمى “تثبيت مكتبة PHP Zmanim”. لن أشعر بالإهانة ولن أحكم عليك.
من الصعب فهم أهمية حسابات الوقت الدقيق على اليوم الديني اليهودي والأسبوع والحياة. يشمل كل شيء من متى يبدأ الصوم وينتهي إلى متى يكون متأخرًا (أو مبكرًا) لإلقاء صلوات معينة إلى اللحظة التي تكون فيها مجرد امتلاك (ناهيك عن تناول) الخبز ممنوعًا.
للتعبير بطريقة أخرى، سأشارك اقتباسًا من الأب الرباني أبراهام جوشة حيشيل في كتابه “السبت”.
معنى السبت هو الاحتفال بالوقت بدلاً من المكان. ستة أيام في الأسبوع نعيش تحت سلطة الأشياء في الفضاء؛ في السبت نحاول أن نصبح معتمدين على القدس في الوقت.
Rabbi Abraham Joshua Heschel, “The Sabbath”
حتى مع هذا التفسير، قد يتساءل بعض القراء، “لماذا تصنع مشكلة كبيرة حول هذا؟ هل تخبرني أن الله سيحسب ذلك ضدك إذا كنت 5 دقائق خلف؟”
هذا سؤال صالح، ويستحق لحظة من المناقشة لأنه وإلا فإن الحاجة إلى، ناهيك عن تأثير، هذا المدونة (والتقنيات والتكنولوجيات التي تصفها) يتناقص.
لا، بالطبع، لا يهتم الله. تمامًا مثلما لا يهتم مدرب المسار “ب” إذا قمت بالإحماء قبل الجري، أو أدير تمارين الموسم الخارجي، أو أشرب ما يكفي من الماء. دعونا نواجه الحقيقة: مهما كانت صعوبة التدريب، لن يكون مدربي أكثر صحة. ومع ذلك، يريد مدربي – الذي يهتم بي وراء أدائي في السباق القادم، أن أهتم. يريدون مني أن أكون ملتزمًا بالكامل، إن كان ذلك فقط لأنهم يعرفون أن تجربتي ستكون أكثر استيعابًا بسبب ذلك.
وبنفس الطريقة، لا يهتم الله. لكننا نعلم (من خلال نصوص التوراة والتلمود) أن الله يريد منا أن نهتم. وهكذا حاول العلماء اليهود الذين مضوا عصور باستخدام الأدلة المقدمة في النص إلى التخلص من الإجابات البسيطة والبسيطة، والحفر أعمق لكشف التفاصيل.
العودة إلى السؤال المطروح: “متى تكون صلوات العصر؟” لفهم ذلك، يجب أن نفهم أولاً ما الذي يحدد “اليوم” (مقابل “الليل”)؛ كيفية فهم التماسيح التي تفصل “الصباح” عن “الظهر”؛ كيفية التقسيم بشكل فعال لليوم إلى أجزاء؛ وأكثر من ذلك.
بينما سيقدم هذا المدونة بعض هذه المفاهيم والمصطلحات حسب الحاجة، يجب ألا يعتبر شاملًا بأي تخيل.
لا عجب أن الكمبيوترات سبقت في حساب هذه الأوقات بسرور، والآن هناك مجموعة واسعة من المواقع والتطبيقات جاهزة للقيام بالعمل الخاص بنا. حتى بالنسبة لأولئك الذين يرغبون في إنشاء برامجهم الخاصة لإجراء هذه الحسابات، هناك حلول يوفر الوقت على شكل مكتبات التعليمات البرمجية مثل كوشرجافا والعديد من المحولات الخاصة بها، بما في ذلك PHP، سويفت، .Net، جافاسكربت، بيثون، وغيرها الكثير.
ومع ذلك، من المهم فهم النظرية وراء الأدوات. يجب أن يتأكد أي شخص يرغب في إنشاء موقع أو تطبيق من أن برنامجه لا يعطي الأوقات الخاطئة عرضيًا. على الرغم من ذلك، كما ذكرنا سابقًا، لن يذهب أحد “إلى الجحيم” (في اللغة المعاصرة) لصلاة الخطأ، إلا أن هناك أمرًا قانونيًا صارمًا:
וְלִפְנֵ֣י עִוֵּ֔ר לֹ֥א תִתֵּ֖ן מִכְשֹׁ֑ל וְיָרֵ֥אתָ מֵּאֱלֹהֶ֖יךָ
“lifnei iver lo titein michshol v’yareita mei-elohecha”
“لا تضع عقبة أمام الأعمى”(Leviticus 19:14)
فما هو إلا إذا أخطأ شخص ما عن طريق الخطأ. ومع ذلك، فإن تقديم معلومات خاطئة تتسبب في أخطاء شخص (أو ما هو أسوأ من ذلك، الكثير من الناس)، معتقدين أن المعلومات التي تلقوها (من تطبيقك) كانت دقيقة وموثوقة.
الأوقات الأساسية
مع الأخذ بعين الاعتبار ذلك، سنبدأ بفهم الأوقات التي هي بسيطة وأقل تأثرًا بالاختلافات في التقاليد اليهودية:
- شروق الشمس (Netz Hachma) هو الشروق البحري القديم – اللحظة التي يلامس حافة القرص العلوي للشمس الأفق.
- غروب الشمس (Shkia) هو الجانب الآخر من العملة اليومية – اللحظة التي تنخفض فيها حافة الشمس العلوية أسفل الأفق.
- 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 تقسيمًا للوقت من الفجر (alot hashachar، أو فقط “alot” عندما يكون الضوء مرئيًا فوق الأفق، لكن قبل شروق الشمس نفسه) إلى الليل (tzeis hakochavim، أو فقط “tzeis”، عندما لا يكون الضوء مرئيًا فوق الأفق، بعد غروب الشمس). سنتعمق أكثر في كل من الفجر (alot) والليل (tzeit) لاحقًا في المدونة.
- ساعات الموسم (sha’ot zmaniyot) هي 1/60 من ساعة الموسم وقد تكون أكبر أو أصغر من دقيقة الساعة الخاصة بك.
كما ترون، فإن الشروق والغروب يشكلان الجوهر الأساسي لجميع حسابات الوقت الأخرى، ويتم اشتقاق عدد كبير من الأوقات الشعبية الهامة خلال اليوم مباشرة من تلك. على سبيل المثال، في بعض التقاليد، ستجد:
- يبدأ السبت في الليلة الجمعونية، 18 دقيقة قبل الغروب (shkia)
- ينتهي السبت في الليلة السابعة بعد الغروب (shkia) بـ 45 (أو 50، أو 72) دقيقة
- …وهكذا.
حسابات حيث “الأمر معقد”
بمجرد تحديد الشروق والغروب، الخطوة التالية هي تحديد الأوقات الحرجة للفجر والليل. الفجر (Alot haShachar، أو مجرد “Alot”) والليل (Tzeis hakochavim، أو مجرد “Tzeis”) يعكسون بعضهم البعض بقدر ما يفعل الشروق والغروب. الفجر هو اللحظة التي يظهر فيها الضوء (وليس الشمس) فوق الأفق. الليل هو اللحظة التي لم يعد الضوء مرئيًا.
لسوء الحظ، ما إذا كان هناك أو لا يوجد “ضوء” هو موضوعي للغاية، وبالتالي فإن الطريقة التي تم بها حسابه تتراوح في جميع أنحاء الخريطة.
- بعض التقاليد تستخدم عددًا ثابتًا من دقائق الساعة قبل الشروق أو بعد الغروب.
- آخرون سيستخدمون الفلك لتحديد الوقت الذي تكون فيه الشمس أسفل الأفق بعدد محدد من الدرجات.
- آخرون سيستخدمون صيغة، مثل أخذ كمية النهار (من الشروق إلى الغروب)، وتقسيم ذلك إلى 10 أجزاء متساوية، ثم طرح هذا المبلغ من الشروق أو إضافته إلى الغروب.
- ومع ذلك، سيأخذ الآخرون الوقت عندما تكون الشمس أسفل الأفق في يوم “متساوٍ” (أي خريف أو ربيع يوم الاعتدال، عندما يكون مقدار الشمس والظلام متساويًا تمامًا)، ويحسبون الفرق (بالدقائق الساعة) بين ذلك الوقت وشروق الشمس، ويقومون بتحويل تلك الدقائق مقابل “الدقائق الموسمية” (“sha’ot zmaniyot”) لليوم المعني، وأخيرًا يطرحون هذا المبلغ من وقت شروق الشمس (أو يضيفون ذلك إلى غروب الشمس) لليوم المعني.
هل يبدو الأمر مربكًا؟ كما يقول عنوان هذا القسم، “إنه معقد.”
وجهة نظري في وصف هذه ليست لتحديد حساب “صحيح” واحد، ولكن بدلاً من ذلك لمساعدتك على فهم الهدف النهائي من كل نوع من أنواع الحسابات – وكذلك لتفهم أن هناك طرقاً متعددة يصل إليها تقاليد يهودية مختلفة بشأن كل حساب.
الأوقات المعقدة
بمجرد الحصول على الفجر (alot)، وشروق الشمس (netz)، وغروب الشمس (shkia)، والليل (tzeis)، يصبح من الممكن حساب أوقات يومية أخرى مهمة. وهذا يشمل:
- أقرب وقت للصلوات الظهرية (Mincha Gedola)، والذي غالبًا ما يتم حسابه كعدد معين من الساعات الموسمية (sha’ah) بعد الفجر أو شروق الشمس. الهدف من هذا الوقت هو أنه هو أول لحظة يحدث فيها “بعد الظهر” (حرفيًا، بعد منتصف النهار).
- الوقت المفضل للصلوات الظهرية (Mincha ketana)، والذي يتم حسابه كعدد أكبر من الساعات الموسمية (sha’ah) بعد شروق الشمس (netz) أو الفجر (alot). الهدف هنا هو أنه أكثر من 3/4 من اليوم، عندما يكون من الواضح أنه ظهر – ولكن دون الخطر أن يكون ببالغ الليل (tzeis).
- آخر وقت للصلاة العصرية (Plag haMincha ، أو “plag”) ، والذي غالبا ما يتم حسابه كفترة بين أفضل وقت للصلاة العصرية (mincha ketana) والليل (tzeis).
في حين أن هناك عدة أوقات رئيسية أخرى سنصل إليها في م部落 آخر ، هذه كافية لنبدأ.
تثبيت مكتبة PHP Zmanim
بعد التعامل مع تلك التفاصيل الفنية ، يمكننا الآن الانتقال إلى … بعض التفاصيل الفنية! باستثناء أن هذه المرة هي تفاصيل فنية فنية. (ولأولئك الأشخاص الذين تخطوا طول الطريق من المقدمة إلى هذا القسم ، مرحبًا بكم! من الجيد أن نراكم مرة أخرى!)
PHP Zmanim هي مكتبة معقدة تشمل ليس فقط استيراد Kosher Java إلى لغة PHP ولكن أيضًا بعض الوحدات المساندة مثل كاربون (أداة تساعد على تسريع تحويلات التواريخ والأوقات وجعلها أسهل وأكثر دقة) ؛ Symfony (واجهة برمجة التطبيقات لتصميم الويب) ؛ وبعض الأدوات الأصغر أخرى.
النقطة هي أن كل تلك الوحدات تعمل مع PHP Zmanim وأنت بحاجة إلى تثبيتها كلها لكي يعمل أي شيء. أسهل طريقة لتثبيتها كلها هي استخدام أداة PHP “مُصنّع” التي تدير التبعيات.
إذا كنت بحاجة لتشغيل 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()"
قبل البدء، ستحتاج إلى معرفة بضعة أشياء عن الموقع الذي تطلب الأوقات منه:
- خط العرض وخط الطول.
- فضاء الوقت، مصنفة باستخدام تنسيق قاعدة بيانات التوقيت (مثال:
"America/New_York"
). - ارتفاع ذلك الموقع، إذا اخترت استخدامه. (مفسد المفاجأة: نادرًا ما يؤثر الارتفاع في هذه الحسابات.)
- السنة، الشهر، واليوم للأوقات التي ستقوم بحسابها.
صيغة إنشاء كائنك كما يلي:
$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