有一段时间没有写关于PHP Zmanim的内容了——我在使用它时所做的工作以及在实施过程中学到的东西。但尽管有延迟,我始终打算继续这个对话。这就是我们今天要做的事情。
在我的第一篇文章中,我解释了如何安装并开始使用PHP Zmanim库。接着,在下一篇文章中,我深入探讨了如何计算更复杂的时间以及工具的真正威力——应用于各种zmanim的最常见拉宾意见。我将从上次停下的地方继续,最小程度地重叠,所以如果您需要一分钟来恢复速度,我已经链接到了那些先前的文章。
今天的目标是探索PHP Zmanim的用途,超越了对库的相对简单的使用。这包括:
- 将标准时间调整为犹太教堂特定用例(“每天Mincha在日落前25分钟开始”)。
- 使用PHP Zmanim库函数和方法提供非时间计算,例如每周的Torah部分、希伯来日期,以及指定日期是否为节日(如Rosh Chodesh或Sukkot)。
鸣谢
我需要再次表示感谢那些使这一切成为可能的人。在众多名字中,首要的是Zachary Weixelbaum,即 PHP Zmanim 库的维护者,以及 Eliyahu Hershfeld,即 Kosher Java 库的创建者,PHP Zmanim 基于该库而开发。
快速回顾
上次我们结束时,我们有一个稳固的基本 PHP 脚本,其中包括:
- 设定位置(纬度/经度)、时区和海拔的变量。
- 设定日期
- 从这些变量创建一个 PHP Zmanim 对象
- 使用内置方法计算从日出到午祷再到星光出现的时间
它看起来像这样:
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 的 format 方法使输出更易读:
$gedolah = $gedolah->format('g:i a');
“因人而异” — 调整时间
对那些不常去犹太教堂的人(无责任,无羞耻,你仍然受欢迎),可能并不明显,但尽管有”zman”这个名字,很少有组织在Mincha Ketana、Mincha Gedola或Plag haMincha时祈祷午后祷文。
事实上,关于计算时间的许多工作与直接的“Mincha Gedola是几点?”关系不大,而更多地涉及“我们可以合理安排Mincha的时间到多晚,这样每个人下班后都有时间赶到;但又不会太晚以至于没人来因为他们会错过晚餐?”
如果这太理论化了,让我分享一下在制定每周日程时我的犹太教堂考虑的逻辑“竹块拼图”:
- 周五晚烛光点燃:Shkia(日落)减去18分钟
- 夏季周五Mincha:Plag haMincha(使用“plagHaminchaAteretTorah”)减去20分钟
- 冬季周五Mincha:Shkia(日落)减去22分钟
- 周六Mincha:Shkia减去40分钟
- 周六Ma’ariv:Shkia加50分钟
- 周六安息日结束:Shkia加45分钟
- 工作日Mincha:找到本周最早的Shkia时间,然后减去17分钟
虽然我之前提到的所有其他时间仍然重要,但希望你开始意识到它们重要的频率没有人们可能期望的那么高。
那么,您如何获取一个时间(比如 shkia/日落),然后加减分钟?我们将从之前的脚本开始:
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 自带的字符串转时间函数。如果我让您感到悬念重重,我深感抱歉。但实际上这真的很简单。
《Torah》章节是什么?希伯来日期是多少?什么时候是 Rosh Chodesh?
(……以及其他经常在您的犹太教堂内外问及的重要但令人困扰的问题。)
除了日期计算,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
对象,并且可以使用类似于我们为时间找到的方法。例如,假设我们选择的日期是一个星期六,我们可以获取《Torah》节选:
$format = Zmanim::format();
$parshaeng = json_decode('"' . $format->formatParsha($jewishCalendar) . '"');
(暂时忽略$format
设置。稍后我们会详细讨论它)。
如果您运行该代码,$parshaeng
将给出:
Parshas Ki Savo
你会注意到,我们不需要提供纬度、经度、时区等信息。我无法再次强调这一功能的重要性——仅凭此功能,即可获取日期、Torah部分等信息,使PHP Zmanim库本身就非常有用,即使没有时间计算功能。。你可以要求显示希伯来语吗?
?当然可以!这就是$format
行的作用。
首先,解释一下这是什么:这是一种修改Zmanim和jewishCalendar
等对象的方法,设置显示和输出选项。调用Zmanim::format()
而不提供其他信息会默认使用英语。但是,你可以通过添加以下行告诉系统你想要希伯来语:
现在,如果你运行相同的json_decode(‘”‘ . $format->formatParsha($jewishCalendar) . ‘”‘)
行,你会得到:
$format->setHebrewFormat(true)
将所有内容整合在一起:
כי תבוא
这将显示:כי תבוא – Ki Savo。
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";
今天是星期几?
更具体地说,今天是希伯来历的星期几?
与前面的示例类似,我们首先有一个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”,然后您可以继续进行任何您想要的逻辑或流程,比如显示日期(或不显示)。
接下来呢?
信不信由你,还有更多内容要涵盖。在接下来的几周内 每当我有时间,我想要介绍如何利用内置的天文函数进行时间计算。信不信由你,这对于获得像开始和结束安息日和节日以及其他仪式的确切时间非常重要。
与此同时,如果您想看到我介绍其他内容,或者有问题、更正或赞扬,请随时在下方评论中留言。
Source:
https://dzone.com/articles/time-data-series-the-rest-of-the-story