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
クラスが含まれています。これを用いると、和暦(元号)を含むカレンダー表示は可能ですが、旧暦(太陰太陽暦)そのものの高精度な変換機能は標準では提供されていません。 - 特徴:
- 現代的な国際化対応の一環として提供されているため、汎用性は高い
- 旧暦変換に求められる高精度な天文計算(例:朔・望、節気の計算)は含まれていないため、カスタマイズまたは別途アルゴリズム実装が必要となる
- 活用方法:
旧暦変換に特化したアルゴリズムと併用することで、補完的な役割を果たすことが可能です。
精度向上のポイント
- 朔日計算
新月の正確な時刻計算には天体力学アルゴリズム(VSOP87理論)が必要。 - 地域差の考慮
江戸時代以前は地方ごとに異なる暦が使用されていたため、歴史資料との整合性が課題。 - データソース
東京大学史料編纂所の「日本歴日原典」データベースを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 を検討してください。
- 簡易な変換であれば lunardate や convertdate、chinesecalendar が手軽です。
これらのライブラリを組み合わせることで、用途に応じた旧暦変換システムの実装が可能です。例えば、基盤として天文計算が必要なら PyMeeus を参考にし、実装済みの高精度変換が求められるなら qreki_py や sxtwl を利用するなど、自由に組み合わせて活用してください。
コメント