自從我寫了關於 PHP Zmanim 的文章以來已經有一段時間了 — 我在這方面所做的工作以及在實施過程中學到的東西。儘管有些延遲,我一直打算繼續這個話題。這就是我們今天要做的事。
在我的 第一篇文章 中,我解釋了如何安裝和開始使用 PHP Zmanim 庫。然後,在 下一篇文章中, 我深入探討了計算更複雜的時間以及這個工具的真正力量 — 應用各種 zmanim 的最常見拉比意見。 我將從我停下的地方繼續,重疊部分最小,因此如果您需要花一點時間回顧,我已經鏈接到那些之前的文章。
今天的目標是探索 PHP Zmanim 的使用,超越對庫的相對簡單使用。這包括:
- 將標準時間調整為特定於會堂的使用案例(“每日 Mincha 在 Shkia 前 25 分鐘開始”)。
- 使用 PHP Zmanim 庫的功能和方法,提供非時間計算 — 例如每週的托拉部分、希伯來日期以及指定日期是否為假日(如 Rosh Chodesh 或 Sukkot)。
致謝
再次感謝那些使這一切成為可能的人。在眾多名字中,首要的是Zachary Weixelbaum,也就是PHP Zmanim庫的維護者,以及Eliyahu Hershfeld,也就是Kosher Java庫的創建者,PHP Zmanim就是基於這個庫開發的。
快速回顧
上次我們完成了一個堅實的基本PHP腳本,它:
- 設置了位置(緯度/經度)、時區和海拔的變數。
- 設置了日期
- 從這些變數創建了一個php zmanim對象
- 使用內置方法計算從日出到mincha到tzeit hakochavim等任何時間
它看起來像這樣:
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頁面中有描述),您可以獲取各種時間。例如,要使用特定拉比意見獲取Mincha Gedola,我可以包括:
$gedolah = $zmanim->minchaGedola16Point1Degrees
在上一篇博客中,我還介紹了如何使用PHP Zmanim的格式化方法使輸出更易讀:
$gedolah = $gedolah->format('g:i a');
“依個人口味”—調整時間
對於那些不常在會堂裡度過時間的人(沒有責怪,也沒有羞愧,你仍然受歡迎),也許不太明顯,但—儘管在zman的名稱中—很少有組織在Mincha Ketana、Mincha Gedola或Plag haMincha時禱告(午後祈禱)。
事實上,與計算時間相關的許多工作與直接的“Mincha Gedola是幾點?”不那麼有關,而更多地與“我們可以合理安排Mincha的時間到多晚,讓每個人下班後都有時間到達這裡;但不要太晚,以至於沒人來因為他們會錯過晚餐?”
如果這太理論化了,請允許我分享在設定每週時間表時我們的會堂考慮的邏輯競技拼圖:
- 週五晚上點燈:日落時間減去18分鐘
- 夏季週五Mincha:Plag haMincha(使用“plagHaminchaAteretTorah”)減去20分鐘
- 冬季週五Mincha:日落時間減去22分鐘
- 週六Mincha:日落時間減去40分鐘
- 週六Ma’ariv:日落時間加50分鐘
- 週六安息日結束:日落時間加45分鐘
- 平日Mincha:找到本週最早的日落時間,然後減去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 函式庫變得非常有用,即使沒有時間計算也是如此。這使得 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: י״ח אלול תשפ״ד
今天是這一天嗎?
有時您需要檢查特定日期是否是… 特定的一天,例如Rosh Chodesh(新月)或多日節日的一部分(如Sukkot)。
事實證明,PHP Zmanim方法使這變得非常簡單。假設您已經像其他示例一樣開始,一旦設置了jewishCalendar
對象,只需這樣:
$jewishCalendar->isRoshHashana();
$jewishCalendar->isSuccos();
如果日期與節日匹配,它將返回“true”,然後您可以繼續進行您想要的任何邏輯或處理,例如顯示日期(或不顯示)。
接下來是什麼?
信不信由你,還有更多要談論的。在接下來的幾週內,每當我有時間,我會介紹如何利用內置的天文功能進行時間計算。信不信由你,這對於確切計算Shabbat和節日的開始和結束時間以及其他儀式非常重要。
與此同時,如果您想看到我介紹其他主題,或者有問題、更正或讚美,請隨時在下方留言。
Source:
https://dzone.com/articles/time-data-series-the-rest-of-the-story