# 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