MT覚え書き:エントリーに月齢

■このエントリーはMTを使っていた頃の覚え書きです■

その日(今日)の月齢はBlogPetのフラッシュ背景で表示させてるのですが、昔のエントリー、特に釣りに行った日(エントリーを書いた日)はどんな月齢だったかなぁなんて思ったりした時、月齢カレンダーで調べたりするのもちょっと。。。
というわけで、前からやってみたかったのでやってみました。

スクリプトは「星が好きな人のための新着情報」さんの、「月齢計算(JavaScript) 」を使いました。

思いっきり調べて探したわけでなく、前に見つけたやつをさくっと埋め込んだだけなので、MT用のプラグインとかで見つけたらまた埋め直します。。。
作業メモ。

で、エントリー用にちょこっと手を加えました。
まず、月齢用の画像を用意し、サーバにアップ。
(0.png〜29.png)

ウチは「月楼迷宮〜泡沫の蛍華〜」さんの素材を、サイズ修正しPNGに加工したものを使ってます。

で、表示させたい場所に以下を記述。

<SCRIPT LANGUAGE="JavaScript">
<!--
/***********************************************************************
月齢計算 version 2.3 for JavaScript 1.1
(C)opyright 1998 福原直人
このスクリプトは、福原直人(naohito@mb.infoweb.ne.jp)が著作権を有しています。
************************************************************************/

/*
設定項目
*/

// 画像ファイルの格納ディレクトリのURL
var imagedir = "<$MTBlogURL$>moon/";

// 画像ファイルの拡張子
var suffix = ".png";

// 画像ファイルの表示サイズ(幅)
var imageWidth = 16;

// 画像ファイルの表示サイズ(幅)
var imageHeight = 16;


/*
PNG対応ブラウザを判定
*/

function enablePNG() {
var ver = parseFloat(navigator.appVersion);
var name = navigator.appName;
var platform = navigator.platform;
var pngOK = false;

if (name == "Netscape" && ver >= 4.04) {
pngOK = true;
} else if (name == "Microsoft Internet Explorer" && ver >= 4.0) {
if (platform.charAt(0) == "W") {
pngOK = true;
}
} else if (name == "Mozilla") {
pngOK = true;
}
return pngOK;
}

/*
新月日計算
引数  julian ユリウス通日
戻り値 与えられたユリウス通日に対する直前の新月日(ユリウス日)
*/
function getNewMoon(julian) {

var k = Math.floor((julian - 2451550.09765) / 29.530589);
var t = k / 1236.85;
var nmoon = 2451550.09765
+ 29.530589 * k
+ 0.0001337 * t * t
- 0.40720 * Math.sin((201.5643 + 385.8169 * k) * 0.017453292519943)
+ 0.17241 * Math.sin((2.5534 + 29.1054 * k) * 0.017453292519943);
return (nmoon); // julian - nmoonが現在時刻の月齢

}

/*
ユリウス通日計算
引数  時刻(Dateオブジェクト)
戻り値 ユリウス通日(浮動小数点数)
*/
function getJulian(date) {
var Dt = Date.parse("<$MTEntryDate format="%m/%d/%Y %H:%M:%S"$>")/*エントリーの月齢*/
return Dt / 86400000.0+2440587.5;

}

/*
0,1,2,3 ... を 00,01,02,03 ... に。
(変な関数名だ)
*/
function maeZero(num){

if (num < 10){
return '0' + num;
} else {
return num;
}

}


/*
メイン処理
*/

var moonage;
var image;

var appName = navigator.appName.charAt(0);
var appVer = navigator.appVersion.charAt(0);

var nowDate = new Date();

julian = getJulian(nowDate);

var year = nowDate.getYear();
if(year < 2000){
year += 1900;
}
var month = nowDate.getMonth() + 1;
var day = nowDate.getDate();
var week = (new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'))[nowDate.getDay()];
var hour = nowDate.getHours();
var minute = nowDate.getMinutes();

var nmoon = getNewMoon(julian);
// getNewMoonは新月直前の日を与えるとうまく計算できないのでその対処
// (一日前の日付で再計算してみる)
if (nmoon > julian) {
nmoon = getNewMoon(julian - 1.0);
}

var age = julian - nmoon; // julian - nmoonが現在時刻の月齢

if(appName == "N" && appVer == "2") {
moonage = age;
} else {
moonage = new String(age);
}


// 月齢を表示用に編集(小数以下第一位まで表示)
// 画像ファイル名を編集
// でもこんな回りくどいことをしなくてもいいような気が。。。。
if (age >= 0) {
moonage = moonage + ".0"; // 小数部が0の時に備えた処理
if (moonage.charAt(0) == ".") { // 整数部が飛ばされたときの処理
moonage = "0" + moonage;
}
if(age >= 10) {
moonage = moonage.substring(0,4);
var image = imagedir + moonage.substring(0,2) + suffix;
} else {
moonage = moonage.substring(0,3);
image = imagedir + moonage.substring(0,1) + suffix;
}

if(enablePNG() == true){
document.write(' <img width="', imageWidth, '" height="', imageHeight, '" src="', image, '" title="moonage:', moonage, '" />');
}
}

//-->
</SCRIPT>

// 画像ファイルの格納ディレクトリのURLを月齢画像をアップしたディレクトリに修正。

オリジナルのスクリプトは、今日を基準に月齢を表示しているので、

return date.getTime() / 86400000.0+2440587.5;

の部分を、

var Dt = Date.parse("<$MTEntryDate format="%m/%d/%Y %H:%M:%S"$>")/*エントリーの月齢*/
return Dt / 86400000.0+2440587.5;

に変えてみました。(あってるのかなぁ。。。)

また、表示部分の、

document.write(year, '-', maeZero(month), '-', maeZero(day), ' (', week, ') ');
document.write(' ', maeZero(hour), ':', maeZero(minute), ' ');
document.write('moonage: ', moonage);
if(enablePNG() == true){
document.write(' <img width="', imageWidth, '" height="', imageHeight, '" src="', image, '" alt="" />');

を、月齢画像だけを表示させたかったので、

if(enablePNG() == true){
document.write(' <img width="', imageWidth, '" height="', imageHeight, '" src="', image, '" title="moonage:', moonage, '" />');

に変更しました。
オリジナルでは、日付(今日の)、月齢数、月齢画像が表示されます。

あとはスタイルシートを修正し再構築して終了。

ウチは、タイトルのワンポイントっぽく飾ってみたのでエントリーのリストを見ると月齢の移り変わりがきれいだね。

Comment

Post a comment
















管理者にだけコメントをわたす。

 

Trackback

Trackback Pings

※この記事に関係の無いトラックバックは削除させていただきます。
FC2ブログユーザーは”こちら”をクリック。

このエントリーのURL
 

copyright © 武州屋 all rights reserved. Powered by FC2ブログ.ホームページ アフィリエイト レンタルサーバー FC2ブログ