დავწერე PHP Zmanim-ის შესახებ – სამუშაო, რაც მე გავაკეთე და ის, რაც ვისწავლე მისი განხორციელებისას. მაგრამ მიუხედავად დაგვიანებისა, ყოველთვის განზრახული მქონდა საუბრის გაგრძელება. სწორედ ამას ვაკეთებთ დღეს.
ჩემს ავუხსენი, თუ როგორ უნდა დააინსტალიროთ და დაიწყოთ PHP Zmanim ბიბლიოთეკა. შემდეგ, , მე ჩავთხარი უფრო რთული დროის გამოთვლა და ხელსაწყოს რეალური ძალა - ყველაზე გავრცელებული რაბინული მოსაზრებების გამოყენება სხვადასხვა ზმანისთვის. მე ვაგრძელებ იქ, სადაც შევაჩერე მინიმალური გადაფარვით, ასე რომ, თუ საჭიროა ერთი წუთი დახარჯოთ სიჩქარის დასაბრუნებლად, მე მივაბარე წინა პოსტებს.
მიზანი დღეს არის PHP Zmanim-ის გამოყენების შესწავლა, რომელიც სცილდება ბიბლიოთეკის შედარებით მარტივ გამოყენებას. ეს მოიცავს:
- სტანდარტული დროის აღება და მისი კორექტირება სინაგოგის სპეციფიკური გამოყენების შემთხვევებისთვის („მინჩა იწყება ყოველ დღე შკიამდე 25 წუთით ადრე“).
- PHP Zmanim-ის ბიბლიოთეკის ფუნქციებისა და მეთოდების გამოყენება, რომლებიც უზრუნველყოფენ არადროის გამოთვლებს – როგორიცაა ყოველკვირეული თორის ნაწილი, ებრაული თარიღი და არის თუ არა მითითებული თარიღი დღესასწაული (როშ ჩოდეში ან სუკოტი).
მადლიერებები
კიდევ ერთხელ, უნდა დავიწყოთ ჩემი მადლიერების გამოხატვით იმ ადამიანების მიმართ, რომლებმაც ეს ყველაფერი შესაძლებელი გახადეს. უპირველეს ყოვლისა, სახელების გრძელ ჩამონათვალს შორის არის ზაქარი ვეიქსელბაუმი, თავად შემსრულებელი, და ელიაჰუ ჰერშფელდი: შემქმნელი, რომელზეც დაფუძნებულია PHP Zmanim.
სწრაფი განახლება
როდესაც ჩვენ შევაჩერეთ, ჩვენ გვქონდა მყარი ძირითადი PHP სკრიპტი, რომელიც:
- ადგენს ცვლადებს მდებარეობისთვის (გრძედი/გრძედი), დროის სარტყელთან და სიმაღლესთან ერთად.
- ადგენს თარიღს
- ქმნის 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"; ?>
მაგრამ მზის ამოსვლა მხოლოდ დასაწყისია. ნებისმიერი ჩაშენებული გამოთვლების გამოყენებით (რომლებიც აღწერილია ), შეგიძლიათ გაიყვანოთ სხვადასხვა დროს. მაგალითად, იმისთვის, რომ მინჩა გედოლა გამოიყენოს კონკრეტული რაბინული აზრი, მე შემიძლია შევიტანო:
$gedolah = $zmanim->minchaGedola16Point1Degrees
ბოლო ბლოგში მე ასევე გავაშუქე PHP Zmanim-ის ფორმატის მეთოდის გამოყენების გზები, რათა გამომავალი უფრო იკითხება:
$gedolah = $gedolah->format('g:i a');
"მარილი გემოვნებით" - დროების კორექტირება
მათთვის, ვინც დიდ დროს არ ატარებს სინაგოგაში (არაა ბრალს, არ გრცხვენიათ, აქ მაინც მოგესალმებათ) ეს შეიძლება არ იყოს აშკარა, მაგრამ - მიუხედავად ზმანის სახელისა - ძალიან ცოტა ორგანიზაცია ლოცულობს მინჩას (შუადღეს). ლოცვები) მინჩა ქეთანაში, მინჩა გედოლაში ან პლაგ ჰამინჩაში.
ფაქტობრივად, დროის გამოთვლასთან დაკავშირებული ბევრი სამუშაო ნაკლებად უკავშირდება სწორ ხაზს „რომელი საათია მინჩა გედოლა?“ და კიდევ „როგორ გვიან დღე-ღამეში შეგვიძლია გონივრულად დავგეგმოთ მინჩა ისე, რომ ყველას ჰქონდეს დრო სამუშაოს შემდეგ აქ მისასვლელად; მაგრამ არც ისე გვიან, რომ არავინ მოვიდეს, რადგან ვახშამი გამოტოვოს?”
თუ ეს ძალიან თეორიულია, ნება მომეცით გაგიზიაროთ ლოგიკური ჯენგას თავსატეხი, რომელსაც ითვალისწინებს ყოველკვირეული განრიგის შედგენისას:
- პარასკევს ღამით სანთლის ანთება: შკია (მზის ჩასვლა) მინუს 18 წუთი
- ზაფხულის პარასკევი მინჩა: Plag haMincha („plagHaminchaAteretTorah“-ის გამოყენებით) მინუს 20 წუთი
- ზამთრის პარასკევი მინჩა: შკია (მზის ჩასვლა) მინუს 22 წუთი
- შაბათი მინჩა: შკია მინუს 40 წუთი
- შაბათი მაარივი: შკია პლუს 50 წუთი
- შაბათის ბოლოს შაბათი: შკია პლუს 45 წუთი
- სამუშაო დღე მინჩა: იპოვეთ ყველაზე ადრეული შკია კვირისთვის, შემდეგ გამოაკლეთ 17 წუთი
მიუხედავად იმისა, რომ ყველა სხვა დრო, რომელიც მე წინა ბლოგებში გავაშუქე, ჯერ კიდევ მნიშვნელოვანია, იმედია, თქვენ იწყებთ იმის გაცნობიერებას, რომ ისინი უფრო ნაკლებად მნიშვნელოვანია, ვიდრე შეიძლება მოელოდეთ.
მაშ, როგორ იღებთ დროს (როგორც შკიას/მზის ჩასვლას) და შემდეგ უმატებთ ან აკლებთ წუთებს? ჩვენ დავიწყებთ იგივე სკრიპტით, რაც ადრე გვქონდა:
<?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-ის საკუთარ string-to-time ფუნქციას. ბოდიშს გიხდით, თუ შეჩერდით. მაგრამ ეს მართლაც ასე მარტივია.
რა არის თორის ნაწილი? რა არის ებრაული თარიღი? როდის არის როშ ჩოდეში?
(...და სხვა არსებითი, მაგრამ შემაშფოთებელი კითხვები ხშირად დასმულია თქვენს სინაგოგაში და მის გარშემო.)
თარიღის გამოთვლებთან ერთად, 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();
თუ თარიღი ემთხვევა დღესასწაულს, ის დაბრუნდება "true" და შეგიძლიათ გააგრძელოთ ნებისმიერი ლოგიკით ან პროცესით, როგორიცაა თარიღის ჩვენება (ან არა).
რა არის შემდეგი?
გინდ დაიჯერეთ თუ არა, ჯერ კიდევ ბევრია გასაშუქებელი. უახლოეს კვირებში, როცა ამას მივაღწევ, მსურს გავაშუქო ჩაშენებული ასტრონომიის ფუნქციების გამოყენების გზები დროის გამოთვლებისთვის. გინდ დაიჯერეთ თუ არა, ეს შეიძლება მართლაც მნიშვნელოვანი იყოს იმ კუთხით, რომ გქონდეთ ნამდვილად ზუსტი დრო ისეთი რამისთვის, როგორიცაა შაბათის დასაწყისი და დასასრული და არდადეგები, სხვა დღესასწაულებთან ერთად.
იმავდროულად, თუ კიდევ არის რამე, ნეტავ ჩემი დაფარვა გქონდეს; ან თუ თქვენ გაქვთ შეკითხვები, შესწორებები ან მადლობა, მოგერიდებათ დატოვოთ ისინი ქვემოთ მოცემულ კომენტარებში.