「月齢時計」の編集履歴(バックアップ)一覧はこちら
「月齢時計」(2010/10/07 (木) 10:04:40) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
// IMAGINE月齢時計を表示するJavaScriptのソースコード拾ってきたので、@wiki用にしてみました。
// ただし、JavaScript入力プラグイン(js)が管理者のみ編集可なページでないと使えなかったので、
// テストしてません><;
//
// 2010/10/06 : これだと動的ページにならないので、改良が必要っぽい。
#divid(clock){}
#divid(moonlist){}
#js(){{
<script type="text/javascript">
<!--
/*
*
* 女神転生 IMAGINE 内部時計と月齢一覧
*
* 参考にした月齢一覧があるのですがurlが判らない。どこかのblogに貼ってあったのですが・・・。
*
* Update History
*
* Date Description
* ---------- -----------------------------------------------------------
* 2007/09/10 取り合えず版を作成
* 2007/11/15 表示を少し変更して横幅を短くした
* 2008/04/07 年を外して曜日を表示するように変更
* 2008/05/26 上弦・下弦を表示
* 2008/07/05 時間の表示方法を少し変更
*
*/
// 2秒ごとにゲーム内時間が1分進みます。
// 実時間2分でゲーム内時間1時間経過
// ゲーム内時間が0:00または12:00になると月齢が1/8ずつ進みます。
// 実時間24分で月齢1/8進む
// 月齢表示の左下が明るい期間は「上弦」です。
// 月齢はNEW MOON(新月)、1/8、2/8、……、FULL MOON(満月)と変化します。
// 月齢表示の左下が暗い期間は「下弦」です。
// 月齢はFULL MOON(満月)、7/8、6/8、……、NEW MOON(新月)と変化します。
//
var First =true
var megaTime, realTime;
function ListMoon() {
var targetDate, targetTime, targetYear, targetMonth, targetDay, targetHour, targetMin, targetSec;
var adjustMin, adjustSec, html, date, time, moon;
targetDate = new Date();
targetTime = targetDate.getTime();
targetYear = targetDate.getYear();
targetMonth = targetDate.getMonth();
targetDay = targetDate.getDate();
targetHour = targetDate.getHours();
targetMin = targetDate.getMinutes();
targetSec = targetDate.getSeconds();
if (targetYear < 2000) targetYear += 1900;
adjustMin = 24 - Math.floor((targetTime - baseTime ) / 1000 / 60) % 24; // ミリ秒なので1000で割る。次の月齢を得るために分を補正
adjustSec = 60 - Math.floor((targetTime - baseTime ) / 1000 ) % 60; // 00秒が月齢の変わり目では無いので補正
html = "<table cellspacing='1' cellpadding='3' border='1' bordercolor='silver' style='font-size:10pt;'>";
html += "<tr bgcolor=white>";
html += " <th>実時間</th><th>月齢</th>";
html += "</tr>";
for (i = 0; i < 300; i++) {
date = new Date(targetYear, targetMonth, targetDay, targetHour, targetMin + adjustMin + (24 * i), targetSec +adjustSec);
time = date.getTime();
moon = Math.floor(baseMoon + (time - baseTime) / 24 / 60 / 1000) % 16;
switch (moon) {
case 0: bgcolor = "#bbddff"; break;
case 8: bgcolor = "#ffcccc"; break;
default: bgcolor = "#ffffff";
}
// チェックされていない もしくは 満月・新月のとき表示
if (!CheckFlg() || (moon==0 || moon==8)) {
html += "<tr bgcolor='" + bgcolor + "'>";
html += "<td>" + GetDateString(date) + "</td><td>" + GetMoonString(moon) +"</td>";
html += "</tr>";
}
}
html += "</table>";
document.getElementById("moonList").innerHTML = html;
}
/*
* 時刻表示
*/
function Clock(megaTime, realTime) {
var html;
// html = "<table cellspacing='1' cellpadding='3' border='1' bordercolor='silver' style='font-size:10pt;font-family=:\"Courier New\",monospace;' >";
html = "";
html += "<form method='post' style='margin: 0px;'>";
html += " <table cellspacing='1' cellpadding='3' border='1' bordercolor='silver' style='font-size:10pt;' >";
html += " <tr bgcolor=white>";
html += " <td><b>実時間</b></td>" + "<td>" + realTime +"</td>";
html += " </tr>";
html += " <tr bgcolor=white>";
html += " <td><b>Imagine</b></td>" + "<td>" + megaTime +"</td>";
html += " </tr>";
html += " </table>";
html += " <div style='font-size:10pt;'>"
html += " <label for='1'><input id='1' name='moon' type='checkbox' value='ok'"
if (CheckFlg()) html += " checked"
html += " >満月・新月のみ</label>"
html += " </div>"
html += "</form>"
document.getElementById("clock").innerHTML = html;
}
/*
* 満月・新月のみ のチェックの有無
*
* Arg : None
* RC : true/false
*/
function CheckFlg() {
if (First) { First=false; return true } // 最初は表示のみ
if (document.forms[0].moon.checked) {
return true;
} else {
return false;
}
}
/*
* IMAGINE内の時間を取得
*
* Arg : None
* RC : 月齢と時間
*/
function GetMegaTime() {
// var nowDate, nowTime;
var min, hour, rc, moon;
var nowDate = new Date();
var nowTime = nowDate.getTime();
min = Math.floor(((nowTime - baseTime) / 1000 / 2 )) % 60; // 2秒で1分
hour = Math.floor(((nowTime - baseTime) / 1000 / 2 / 60 )) % 24;
if (hour < 10) hour = "0" + hour;
if (min < 10) min = "0" + min;
moon = Math.floor(baseMoon + (nowTime - baseTime) / 24 / 60 / 1000) % 16;
rc = GetMoonString(moon) + "" + GetMoonType(moon) + " " + hour + ":" + min;
return rc
}
/*
* 日時を文字列に変換
*
* Arg : 日時
* RC : 日時(文字列)
*/
function GetDateString(date) {
// var year, month, day, hour, min;
var year = date.getYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var min = date.getMinutes();
if (year < 2000) year += 1900;
if (hour < 10) hour = "0" + hour;
if (min < 10) min = "0" + min;
if (day < 10) day = "0" + day;
if (month < 10) month = "0" + month;
return year + "/" + month + "/" + day + " " + hour + ":" + min;
}
/*
* 月齢を文字列に変換
*
* Arg : 月齢(0-15)
* RC : 月齢(0-7 or 文字列)
*/
function GetMoonString(moon) {
var rc;
switch (moon) {
case 0: rc ="NEW MOON" ; break;
case 4: rc ="HALF MOON"; break;
case 8: rc ="FULL MOON"; break;
case 12: rc ="HALF MOON"; break;
default :
if (moon > 8) rc =(16 - moon) + "/8 MOON";
else rc =moon + "/8 MOON";
}
return rc
}
/*
* 上弦・下弦を取得
*
* Arg : 月齢(0-15)
* RC : ↑ ↓ or (上弦、下弦、満月・新月)
*/
function GetMoonType(moon) {
var rc;
if (moon ==0 || moon ==8) rc =" "
else if (moon <8) rc ="↑"
else rc ="↓"
return rc
}
/*
* 現時間を取得
*
* Arg : None
* RC : 現時間
*/
function GetNow() {
// var year, month, date, hour, min, sec, now;
var week = new Array("日","月","火","水","木","金","土");
var now = new Date();
var year = now.getYear();
var month = now.getMonth() + 1;
var day = now.getDay();
var date = now.getDate();
var hour = now.getHours();
var min = now.getMinutes();
var sec = now.getSeconds();
if (year < 2000) year += 1900;
if (hour < 10) hour = "0" + hour;
if (min < 10) min = "0" + min;
if (sec < 10) sec = "0" + sec;
if (date < 10) date = "0" + date;
if (month < 10) month = "0" + month;
return month + "/" + date + "(" + week[day] +")" + " " + hour + ":" + min + ":" + sec;
// return year + "/" + month + "/" + date + " " + hour + ":" + min + ":" + sec;
}
function update_watch() {
megaTime =GetMegaTime();
realTime =GetNow();
Clock(megaTime, realTime);
ListMoon();
setTimeout('update_watch()', 1000); // 1000msec = 1sec
}
//
// 2007/09/10 13:47:40 => 4/8 => 4/16
var baseMoon = 4;
//var baseDate = new Date(2007, 8, 10, 13, 47, 40);
var baseDate = new Date(2009,12-1, 8, 13, 47, 40);
var baseTime = baseDate.getTime() ; // メンテの度に微妙に時間がズレるので補正
//var baseTime = baseDate.getTime() +2 * 2 * 1000; // メンテの度に微妙に時間がズレるので補正
// ゲーム内が進んでいる時は -
// ゲーム内が遅れている時は +
var baseMin = baseDate.getMinutes();
update_watch();
-->
</script>
}}