# moonage.rb: 現在の月齢を表示する
#
# tDiary(http://www.tdiary.org) のプラグインです。
# 改造すればもちろんいろいろに応用できると思います。
#
# 利用規定:
# 自由に利用、改造、移植してください。特に許可は必要ありません。
#
# 謝辞:
# 月齢計算の計算式は、NIFTY-Serve スペースフォーラムでFAQとして
# 公開されたものです。
#
# パラメタ:なし
#
#
# ダウンロード:
# このファイルをそのまま moonage.rb という名前で保存します。
#
#
# 使い方:
# 現在の月齢を表示します。
# <%= moonage %> のように記述すると、
# たとえば次のようなそっけない出力が得られます。
#
# 月齢 0.2の時 0.2
# 月齢 1.5の時 1.5
# 月齢 12.3 12.3
# 月齢 20.0 20.0
#
# 表示する度に計算するので、本文中に挿入するのにはむきません。ヘッダ、フッタや
# サイドメニューなどに入れてお使い下さい。
#
# 月齢毎に画像を表示したりするにはスタイルシートが使えると思います。
#
#
# 更新履歴:
# 2003.06.19 生成されるHTMLのクラス属性の名称をHOWTO-make-plugin.htmlで
# 推奨されている形式に変更
#
# 前回の新月がいつだったか計算
def newmoon(julian)
k = ((julian - 2451550.09765) / 29.530589).floor
t = k / 1236.85
nmoon = 2451550.09765
nmoon += 29.530589 * k
nmoon += 0.0001337 * t * t
nmoon -= 0.40720 * Math.sin((201.5643 + 385.8169 * k) * 0.017453292519943)
nmoon += 0.17241 * Math.sin((2.5534 + 29.1054 * k) * 0.017453292519943)
return nmoon
end
def moonage
time = Time.now
julian = time.to_f / 86400.0 + 2440587.5
nmoon = newmoon(julian)
# newmoonは新月直前の日を与えるとうまく計算できないのでその対処
# (一日前の日付で再計算してみる)
if nmoon > julian then
nmoon = newmoon(julian - 1.0)
end
age = julian - nmoon # julian - nmoonが現在時刻の月齢
return %!#{"%.1f" % age}!
end