paint-brush
時間データシリーズ: 物語の続き@leonadato
338 測定値
338 測定値

時間データシリーズ: 物語の続き

Leon Adato7m2024/10/08
Read on Terminal Reader

長すぎる; 読むには

前回のブログ投稿では、PHP Zmanim ライブラリのインストール方法と使用開始方法について説明しました。次の投稿では、より複雑な時間の計算と、さまざまな zmanim に最も一般的なラビの意見を適用するという、このツールの真の威力について掘り下げました。重複を最小限に抑えて前回の投稿を再開しますので、少し時間を取ってもう一度読み直す必要がある場合は、以前の投稿へのリンクがあります。
featured image - 時間データシリーズ: 物語の続き
Leon Adato HackerNoon profile picture

PHP Zmanim について、私がそれを使って行った作業や、それを実装しながら学んだことについて書いてから、しばらく経ちました。しかし、遅れたにもかかわらず、私はずっと会話を続けるつもりでした。それが今日私たちがやっていることです。


最初の投稿では、PHP Zmanim ライブラリのインストール方法と使用開始方法について説明しました。次の投稿では、より複雑な時間の計算と、このツールの真の威力である、さまざまな zmanim に対する最も一般的なラビの意見の適用について詳しく説明しました。重複を最小限に抑えて中断したところから再開しますので、少し時間を取って元の状態に戻る必要がある場合は、以前の投稿へのリンクを貼っておきます。


今日の目標は、ライブラリの比較的単純な使用法を超えた PHP Zmanim の使用法を探ることです。これには次のものが含まれます。

  • 標準時間を採用し、シナゴーグ固有の使用例に合わせて調整します (「毎日、ミンチャはシュキアの 25 分前に始まります」)。


  • 週ごとのトーラーの部分、ヘブライの日付、指定された日付が休日かどうか (Rosh Chodesh や Sukkot など) などの時間以外の計算を提供する PHP Zmanim ライブラリ関数とメソッドを使用します。

謝辞

もう一度、このすべてを可能にしてくれた人々に感謝の意を表すことから始めたいと思います。まず、長いリストの中に、 PHP Zmanim ライブラリ自体のメンテナーである Zachary Weixelbaum 氏と、PHP Zmanim のベースとなっているKosher Java ライブラリの作成者である Eliyahu Hershfeld 氏の名前があります。

簡単な復習

作業を終えた時点では、次のような基本的な 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"; ?>


しかし、日の出はほんの始まりに過ぎません。組み込みの計算 ( GitHub の readme ページに記載されています) を使用すると、さまざまな時間を取得できます。たとえば、Mincha Gedola に特定のラビの意見を使用させるには、次のコードを含めることができます。

 $gedolah = $zmanim->minchaGedola16Point1Degrees


前回のブログでは、PHP Zmanim の format メソッドを使用して出力を読みやすくする方法についても説明しました。

 $gedolah = $gedolah->format('g:i a');

「塩の味」 – 時間の調整

シナゴーグで多くの時間を過ごさない人々(責められることも恥じることもありません。それでも歓迎されます)にとっては明らかではないかもしれませんが、zman という名前にもかかわらず、Mincha Ketana、Mincha Gedola、または Plag haMincha で Mincha(午後の祈り)を祈る組織はほとんどありません。


実際、時間を計算する作業の多くは、「ミンチャ ゲドラは何時ですか?」という単純な質問ではなく、「ミンチャをどのくらい遅く設定すれば、全員が仕事の後にここに来る時間があるか、しかし夕食を逃して誰も来ないほど遅くならないか?」という質問です。


それがあまりにも理論的すぎるというなら、私のシナゴーグが週のスケジュールを設定するときに考慮する論理的なジェンガパズルを共有させてください。

  • 金曜夜のキャンドルライトアップ:シュキア(日没)マイナス18分
  • 夏の金曜日のミンチャ:プラグ・ハミンチャ(「プラグハミンチャ・アテレト・トーラー」を使用)マイナス20分
  • 冬の金曜日のミンチャ:シュキア(日没)マイナス22分
  • 土曜日のミニチャ:シュキアマイナス40分
  • 土曜日のマーリーヴ:シュキアプラス50分
  • 土曜日の安息日の終わり: シュキアプラス45分
  • 平日のミンチャ:その週の最も早いシュキアを探し、17分を引く


以前のブログで取り上げた他のすべての場合も依然として重要ですが、予想よりも頻度が低いことに気づき始めていると思います。


では、どうやって時間(shkia/日没など)を取得して、分を加算または減算するのでしょうか? 以前と同じスクリプトから始めます。

 <?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 独自の文字列から時刻への関数を使用するだけです。期待を裏切ってしまったら申し訳ありません。でも、本当に簡単です。

トーラーの部分とは何ですか? ヘブライ語の日付は何ですか? ロシュ・ホデシュはいつですか?

(…そして、シナゴーグ内外でよく聞かれる、その他の重要だが厄介な質問。)


日付計算に加えて、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 オブジェクトが使えるようになり、times で見つけたのと同様のメソッドを使用できるようになりました。たとえば、選択した日付が土曜日だったと仮定すると、Torah の部分を取得できます。

 $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 と format オブジェクトから始めます。

 $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」を返し、日付を表示する(または表示しない)など、必要なロジックやプロセスを進めることができます。

では次は何でしょうか?

信じられないかもしれませんが、まだ説明すべきことが残っています。今後数週間のうちに、組み込みの天文学関数を時間計算に活用する方法を取り上げたいと思います。信じられないかもしれませんが、安息日や祝日、その他の行事の開始と終了などの正確な時間を把握する上で、これは非常に重要なことです。


その間、私が取り上げてほしい他の内容がある場合、または質問、訂正、称賛などがある場合は、お気軽に下のコメント欄に残してください。