[PHP]旧暦変換ライブラリ

言語

PHPで高精度な旧暦変換を行うために検討できるライブラリ

lunar-php(コミュニティライブラリ)

GitHub - 6tail/lunar-php: 日历、公历(阳历)、农历(阴历、老黄历)、佛历、道历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道黑道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.
日历、公历(阳历)、农历(阴历、老黄历)、佛历、道历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十...

中国の太陰暦計算アルゴリズムをPHPに移植したライブラリ。旧暦日付と節気(二十四節気)の変換をサポート。

  • 特徴
    • 西暦1901年~2100年に対応
    • 月の満ち欠け計算をベースにした旧暦日付の算出
    • Composer経由でインストール可能
  • 制限
    • 日本の旧暦(天保暦以前)とは計算方式が異なる可能性あり
  • リポジトリ例:
composer require 6tail/lunar-php

JapaneseDate

GitHub - suzunone/JapaneseDate: 日本の祝日や暦を扱うライブラリ
日本の祝日や暦を扱うライブラリ. Contribute to suzunone/JapaneseDate development by creating an account on GitHub.
  • 概要:
    GitHub上で公開されている「JapaneseDate」は、日本の祝日や旧暦(伝統的な太陰太陽暦)の計算をサポートするライブラリです。高精度な変換アルゴリズムが取り入れられており、特に日本独自の暦に関する各種計算(例えば、祝日や暦注、六曜など)を扱う用途で評価されています。
  • 特徴:
    • Composerで簡単にインストール可能
    • 最新のPHPバージョン(PHP7以降)に対応
    • 日本の伝統的カレンダー(旧暦)の計算精度に定評がある
  • リソース:
    GitHub – suzunone/JapaneseDate
composer require japanese-date/japanese-date

IntlCalendar(PHP Intl拡張)を活用した手法

PHP: IntlCalendar - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites i...
  • 概要:
    PHPのIntl拡張(ICUライブラリ内蔵)には、IntlCalendarクラスが含まれています。これを用いると、和暦(元号)を含むカレンダー表示は可能ですが、旧暦(太陰太陽暦)そのものの高精度な変換機能は標準では提供されていません。
  • 特徴:
    • 現代的な国際化対応の一環として提供されているため、汎用性は高い
    • 旧暦変換に求められる高精度な天文計算(例:朔・望、節気の計算)は含まれていないため、カスタマイズまたは別途アルゴリズム実装が必要となる
  • 活用方法:
    旧暦変換に特化したアルゴリズムと併用することで、補完的な役割を果たすことが可能です。

精度向上のポイント

  1. 朔日計算
    新月の正確な時刻計算には天体力学アルゴリズム(VSOP87理論)が必要。
  2. 地域差の考慮
    江戸時代以前は地方ごとに異なる暦が使用されていたため、歴史資料との整合性が課題。
  3. データソース
    東京大学史料編纂所の「日本歴日原典」データベースをCSV化して利用。

アプローチパターン

  • 簡易的な変換lunar-phpで中国式太陰暦をベースに実装。
  • 歴史研究向け:Google Sheetsに専門家作成のデータを格納しAPI連携。
  • 最高精度:C拡張機能でNASAのJPL Horizonsシステムのデータを組み込む。

参考までにPython

Pythonで高精度な旧暦(太陰太陽暦)変換を実現できるライブラリや、それらを組み合わせて利用する手法の例です。各ライブラリの特徴や用途に応じて、プロジェクトの要件に合わせて選択してください。

1. qreki_py

  • 概要:
    日本の伝統的な旧暦変換(および六曜計算)に特化したライブラリです。
  • 特徴:
    • 高精度な計算アルゴリズム(元はQREKI.AWKなど、信頼性の高いアルゴリズムを元にしている)
    • 旧暦の日付変換、六曜(大安、仏滅など)の算出が可能
  • ソース:
    GitHub – fgshun/qreki_py

2. sxtwl (星历万年历)

  • 概要:
    中国の高精度な旧暦(太陰太陽暦)計算ライブラリ。元々C++で実装され、Pythonバインディングも提供されています。
  • 特徴:
    • 非常に高精度な天文計算に基づいた旧暦変換(新月・満月・節気の算出など)
    • 中国版の旧暦変換として、細かな計算結果が求められる用途におすすめ
  • 備考:
    GitHubやPyPI上で公開されているので、利用例やドキュメントを確認して導入してください。

3. lunardate

  • 概要:
    グレゴリオ暦と中国の旧暦(太陰太陽暦)との相互変換をサポートするシンプルなライブラリ。
  • 特徴:
    • 軽量で使いやすい
    • 旧暦の「日付」変換は可能ですが、細部(節気、六曜等)については補助的な機能となる場合がある
  • 使用例:
    pip install lunardate でインストール可能。

4. convertdate

  • 概要:
    様々な暦同士(ユリウス暦、イスラム暦、ヘブライ暦、さらには中国太陰太陽暦)間の相互変換を行えるライブラリ。
  • 特徴:
    • 多様な暦変換モジュールを統合して扱えるので、他の暦との比較や統一的な変換処理で有用
    • 中国の旧暦変換機能を備えているが、用途によっては精度が十分かどうか事前に検証が必要
  • 備考:
    GitHub – fitnr/convertdate やPyPIページをチェックしてください。

5. chinesecalendar

概要:
主に中国の伝統的な祝日や旧暦(太陰太陽暦)に基づいた日付計算、休日判定を行うライブラリ。

  • 特徴:
    • 旧暦の日付変換に加えて、関連する祝祭日や二十四節気の算出が可能
    • カレンダーアプリや日程管理ツールなど、実用的な用途で利用されることが多い
  • 使用方法:
    pip install chinesecalendar で導入可能ですが、用途に応じた設定や補正が必要な場合もあります。

6. PyMeeus

  • 概要:
    天文計算を高精度に行うためのライブラリです。直接旧暦変換のための関数は含まれていませんが、月の位相・節気の計算など、旧暦変換の基礎となる天文計算を自作する際のベースとして利用可能です。
  • 特徴:
    • 高精度な天文アルゴリズムが実装されており、各種暦計算のカスタム実装が可能
    • 自らアルゴリズムを構築する場合、自由度が高い反面、実装コストがかかる
  • 備考:
    学術的な用途や、独自の旧暦算出ロジックを実装したい方におすすめ。

補足

  • 精度のチェック:
    どのライブラリも実装思想やアルゴリズムの違いにより、計算結果に若干の差が出る可能性があります。プロジェクトの要件に合わせ、複数のライブラリで出力を比較・検証するのが望ましいです。
  • 用途に合わせた選択:
    • 日本独自の旧暦で六曜なども算出したい場合は qreki_py が最適です。
    • 中国などの伝統旧暦の高精度計算が必要な場合は sxtwl を検討してください。
  • 簡易な変換であれば lunardateconvertdatechinesecalendar が手軽です。

これらのライブラリを組み合わせることで、用途に応じた旧暦変換システムの実装が可能です。例えば、基盤として天文計算が必要なら PyMeeus を参考にし、実装済みの高精度変換が求められるなら qreki_py や sxtwl を利用するなど、自由に組み合わせて活用してください。

コメント

タイトルとURLをコピーしました