Overview
天文学的な近似法を用いて任意の日時における月齢を計算します。
$m = new MoonAgeTime();
$m->setTargetTime(mktime(12, 0, 0, 10, 27, 1999));
$moonAge = $m->getMoonAge();
- 返り値はfloatです。
- 便宜上、円周率は0.017453278(ラジアン)に、地球の自転遅れは0.00074074074(日)に近似されています。
- 基本的に日本国内での使用を前提としています。
- 近似計算を一部省略しているため、若干実体とは離れます。
Sample
試しにこんな画像を用意してみました。
適当な処理を行うと、現在の月の状況をアイコンで表すことが出来ます。
setTargetTime(time());
echo date('Y-m-d H:i:s') . '現在の月 ... ' . '

getMoonAge() / 30 * 24)) . '.gif" />';
?>
<?php
require_once 'MoonAgeTime.php';
$m = new MoonAgeTime();
$m->setTargetTime(time());
echo date('Y-m-d H:i:s') . '現在の月 ... ' . '<img src="/static/images/icon/moon/' . sprintf("%02d", ceil($m->getMoonAge() / 30 * 24)) . '.gif" />';
?>
Install
依存するライブラリはありません。任意のディレクトリで使用できます。
Source
謝辞
コード内の近似計算においては、
日の出日の入り計算用ライブラリと同じく、長沢工著「
日の出・日の入りの計算」を参考にさせていただきました。感謝します。
Footnote
プログラム内にコメントとして日本語が混入しています。
また思いついてから2時間あまりで作成したため、テストは不十分です。月齢が30を越えるなど微妙な計算結果が返ることがあるかも知れません。