لقد مر وقت طويل منذ كتبت عن PHP Zmanim — العمل الذي قمت به والأشياء التي تعلمتها أثناء تنفيذه. وعلى الرغم من التأخير، كنت دائمًا نويت متابعة الحوار. هذا ما نقوم به اليوم.
في مقالتي الأولى، شرحت كيفية تثبيت والبدء باستخدام مكتبة PHP Zmanim. ثم، في المقالة التالية، تناولت حساب أوقات أكثر تعقيدًا والقوة الحقيقية للأداة — تطبيق أكثر آراء الحاخامات شيوعًا لمختلف الزمانيم. أنا سأستكمل من حيث توقفت مع تداخل أدنى، لذا إذا كنت بحاجة إلى دقيقة لاستعادة السرعة، قمت بربط تلك المقالات السابقة.
الهدف اليوم هو استكشاف استخدامات PHP Zmanim التي تتجاوز الاستخدام النسبي البسيط للمكتبة. وهذا يتضمن:
- تحويل وقت قياسي وضبطه لحالات الاستخدام الخاصة بالمعابد (“يبدأ العصر قبل الشفاء بـ 25 دقيقة كل يوم”).
- استخدام وظائف وأساليب مكتبة PHP Zmanim التي توفر حسابات غير زمنية — مثل جزء التوراة الأسبوعي، التاريخ العبري، وما إذا كان تاريخ محدد عطلة (مثل رأس الشهر أو سكوت).
الشكر والتقدير
مرة أخرى، أحتاج أن أبدأ بذكر امتناني للأشخاص الذين جعلوا كل هذا ممكنًا. في مقدمة قائمة طويلة من الأسماء هو زاكاري ويكسلبوم، المحافظ على مكتبةزمانيم PHP نفسها، وإيلياهو هيرشفيلد، مبتكر مكتبة جافا الكوشير التي يعتمد عليها زمانيم PHP.
ملخص سريع
عندما تركنا الموضوع الماضي، كان لدينا سكريبت PHP أساسي قوي يقوم بـ:
- تعيين متغيرات للموقع (بالخط العرض/الخط الطول)، مع المنطقة الزمنية والارتفاع.
- تعيين التاريخ
- إنشاء كائن زمانيم 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 لجعل الإخراج أكثر قراءة:
$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
سوف تلاحظ أننا لم نحتاج إلى تقديم خطوط العرض والطول والمنطقة الزمنية وما إلى ذلك. لا أستطيع التأكيد بما فيه الكفاية أن هذه القدرة وحدها – القدرة على الحصول على التواريخ وأجزاء التوراة والمزيد — تجعل مكتبة Zmanim PHP مفيدة بمفردها، حتى بدون حسابات الوقت.
هل يمكنني الحصول على ذلك باللغة العبرية؟
جزء التوراة؟ بالطبع! هنا حيث يأتي دور السطر $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: י״ח אלול תשפ״ד
هل اليوم هو اليوم؟
أحيانًا تحتاج للتحقق مما إذا كان تاريخ معين… حدثًا معينًا مثل رأس الشهر (الشهر الجديد) أو جزءًا من عطلة تمتد لعدة أيام (مثل سكوت).
يتبين أن طريقة Zmanim في PHP تجعل هذا بسيطًا للغاية. افترض أنك بدأت بنفس الطريقة كما في الأمثلة الأخرى، بمجرد إعداد كائن jewishCalendar
، فإنه بسيط كما يلي:
$jewishCalendar->isRoshHashana();
$jewishCalendar->isSuccos();
إذا كان التاريخ مطابقًا للعطلة، فسيعيد “صحيح”، ويمكنك المتابعة بأي منطق أو عملية تريدها، مثل عرض التاريخ (أو عدم عرضه).
ماذا بعد؟
صدق أو لا تصدق، هناك المزيد لنتناوله. في الأسابيع القادمة كلما سمح الوقت، أود أن أتناول طرق استغلال وظائف الفلك المدمجة لحسابات الوقت. صدق أو لا تصدق، يمكن أن يكون لهذا أهمية كبيرة من حيث الحصول على أوقات دقيقة حقًا لأشياء مثل بداية ونهاية الشابات والأعياد، جنبًا إلى جنب مع غيرها من الملاحظات.
في الوقت الراهن، إذا كان هناك شيء آخر ترغب في رؤيتي يغطيه أو إذا كان لديك أسئلة، تصحيحات، أو تهاني، فلا تتردد في تركها في التعليقات أدناه.
Source:
https://dzone.com/articles/time-data-series-the-rest-of-the-story