Home > イヌでもわかるJavaScript講座 お品書き
イヌでもわかるJavaScript講座 お品書き へ戻ります
イヌでもわかるJavaScript講座


Step.97 - 明日は何の日?


明日は何の日かを表示してみます。


Step テーマ
● setDate()、getDate()

実行例


明日の行事



リスト


<SCRIPT type="text/javascript"><!--
myTbl = new Array( // 行事テーブル(月,日,メッセージ)
1, 1,"元旦",
1,14,"成人の日",
2,11,"建国記念の日",
4,29,"みどりの日",
5, 3,"憲法記念日",
5, 4,"国民の日",
7,20,"海の日",
9,15,"敬老の日",
10,14,"体育の日",
11, 3,"文化の日",
11,23,"勤労感謝の日",
12,23,"天皇誕生日"
);
 
myHit = 0; // 表示した数
myLastCnt = myTbl.length / 3; // テーブルの数を取得/計算
 
function myWrite(){
myD = new Date(); // 今日の日付取得
myDate = myD.getDate(); // '日'取得
myD.setDate(myDate+1); // 明日の日付へ
myMonth = myD.getMonth()+1; // '月'取得
myDate = myD.getDate(); // '日'取得
 
for(i=0; i<myLastCnt; i++){ // テーブルの数だけループ
if (myTbl[i*3] == myMonth && // '月'と
myTbl[i*3+1] == myDate){ // '日'が一致したら..
document.write("● "); // 先頭にマークを表示
document.write(myTbl[i*3+2]); // コメント表示
document.write("<BR>"); // 改行
document.write("<BR>"); // 1行空ける
myHit++; // 表示した数カウント
}
}
if (myHit == 0){ // 何も表示しなかった?
document.write("● 明日の行事は何もありません。");
}
}
// --></script>


サンプルだけの HTMLは こちらへ

説明


Q:"明日は何の日か” を表示できますか?

「今日は何の日か」を、Step.91で表示してみました。しかし、これを「明日は何の日か」に変更しようとすると簡単なようだけど簡単にできません。
なぜならば、1を足すだけでは月の変わり目でつまずいてしまいます。
Step.22の月間カレンダーを作ったときのように「うるう年」まで考慮して力ずくでプログラムを作るのも王道ですが、今回は楽な方法でやってみましょう。

サンプルは、Step.91の完全コピペです。ソースの違いを見れば今回の変更は簡単そうだけど、やっぱり簡単だったということです。

Step.91に次の2行が追加されただけです。

myD = new Date();
myDate = myD.getDate();
myD.setDate(myDate+1) ;
myMonth = myD.getMonth()+1;
myDate = myD.getDate();

日付オブジェクト Date()メソッドに get…がいろいろありますよね。これに対して set…メソッドがあります。見て字のごとく、ゲットに対してセットです。
別にパソコン時計を変更するわけではありません。指定した日の情報を取得させるためだけのことです。
ん? そういえば、どっかのステップで同じことを説明したような…。

myDate = myD.getDate();
myD.setDate(myDate+1) ;
myDate = myD.getDate();

「ん?だから、『日』に1を足すだけだったら、『月』の変わり目がダメでしょ!」
「いえ、いまどきのプログラム言語等はこのような範囲外データを親切に訂正してくれるんです。」

例えば、2000年2月28日に「1日」を足して見ましょう
myD = new Date(2000,1,28);
myYear = myD.getYear();
myMonth = myD.getMonth() + 1;
myDate = myD.getDate();
document.write( "今日は"+myYear+"年 "+myMonth+"月"+myDate+"日");

myD.setDate(myDate+1);
myYear = myD.getYear();
myMonth = myD.getMonth() + 1;
myDate = myD.getDate();
document.write( "明日は"+myYear+"年"+myMonth+"月"+myDate+"日");

myD.setDate(myDate+1);
myYear = myD.getYear();
myMonth = myD.getMonth() + 1;
myDate = myD.getDate();
document.write( "あさっては"+myYear+"年"+myMonth+"月"+myDate+"日");



つまり、訂正してくれるとは、例えば「秒」に「100秒」をセットした場合は「1分」と「40秒」に修正してくれるのです。
10時10分10秒」に setSeconds(100) を処理すると、
myD = new Date(2000,1,1,10,10,10);
myD.setSeconds(100);
myHours = myD.getHours();
myMinutes = myD.getMinutes();
mySeconds = myD.getSeconds();
document.write( myHours+"時"+myMinutes+"分"+mySeconds+"秒");




※【注意】IE3 , NS2-4.05 はこのような処理には対応していません。


そのほか、こんなやり方も考えられますね。
myMsec = myD.getTime() ;
myMsec = myMsec + (1000*60*60*24) ;
myD.setTime(myMsec) ;

参考ステップ
Step.3 現在の日付と時間を表示してみましょう
Step.19 誕生日から何日経過したか計算してみましょう
Step.91 本日の行事を表示してみましょう

リファレンス


●Dateオブジェクト

【書式】
myObj = new Date()
myObj = new Date(日付値)
myObj = new Date(年,月,日,時,分,秒,ミリ秒)

【パラメータ】
日付値(数値の場合):1970/1/1 0:0:0:00 からの経過ミリ秒、もしくはUTC日付データ
日付値(文字列の場合):日付文字列
日付値(ActiveXオブジェクトの場合):VT_DATE値
年:4桁の西暦数値
月:0-11の数値 (0=1月、1=2月…)
日:1-31の数値
時:0-23の数値
分:0-59の数値
秒:0-59の数値
ミリ秒:0-999の数値

パラメータを省略した場合は、現在日付(UTC)を取得します。

【メソッド】
getDate
getUTCDate
setDate
setUTCDate
「日」の取得/セット1-31

 
getDay
getUTCDay
「曜日」の取得0-6
日曜日〜土曜日の数値表現。
getFullYear
getUTCFullYear
setFullYear
setUTCFullYear
IE3 NS2-4.05
「年」の取得/セット4桁の数値

 
getHours
getUTCHours
setHours
setUTCHours
「時」の取得/セット0-23

オブジェクトに「時」が格納されていない場合も「0」。
getMilliseconds
getUTCMilliseconds
setMilliseconds
setUTCMilliseconds
IE3 NS2-4.05
「ミリ秒」の取得/セット0-999

 
getMinutes
getUTCMinutes
setMinutes
setUTCMinutes
「分」の取得/セット0-59

オブジェクトに「分」が格納されていない場合も「0」。
getMonth
getUTCMonth
setMonth
setUTCMonth
「月」の取得/セット0-11

0月〜11月表現。
getSeconds
getUTCSeconds
setSeconds
setUTCSeconds
「秒」の取得/セット0-59

オブジェクトに「秒」が格納されていない場合も「0」。
getTime
setTime
1970/1/1 0:0:0:000
からの経過ミリ秒の取得/セット
1970/1/1 0:0:0:000
からの経過ミリ秒
1970年から285,616年の時間に対応。負の値は1970年以前の時間。
getTimezoneOffsetGMTとUTCの時間差を取得「分」の数値
 
getVarDate
IE3 NS2-NS7 OP
VT_DATE 値の取得VT_DATE 形式の日付値
COMオブジェクト、ActiveX オブジェクトで利用する。
getYear
setYear
「年」の取得/セット2桁〜4桁の数値
1900-1999までは西暦下2桁の数値、それ以外は4桁の数値。(IE)
2000年以前は西暦下2桁の数値、2000年以降は下2桁+100年の数値。(NS)
toDateString
IE3-5.0 NS2-4.7
日付の文字列の取得 
toGMTString日付文字列の取得(GMT)現在はtoUTCStringを使用する。
toLocaleDateString
IE3-5.0 NS2-4.7 OP
ホスト環境の現在の国別情報に対応した日付の文字列の取得 
toLocaleString
OP
ロケール日付文字列の取得文字形式は閲覧者のパソコンの地域設定で変わる。
toLocaleTimeString
IE3-5.0 NS2-4.7 OP
ホスト環境の現在の国別情報に対応した時刻の文字列の取得 
toString
NS2
日付を表す文字列の取得 
toTimeString
IE3-5.0 NS2-4.7
時刻の文字列の取得 
toUTCString
IE3 NS2-4.05
UTC形式日付文字列の取得 
valueOf
IE3 NS2
1970/1/1 0:0:0:000
からの経過ミリ秒の取得(UTC)
1970/1/1 0:0:0:000
からの経過ミリ秒(UTC)
 

※UTC:世界協定時刻
※GMT:グリニッジ標準時
※日付文字列は国設定やOS、ブラウザ、バージョンで日付表記が異なります。
※getUTCxxx、setUTCxxxメソッドは IE3 , NS2.0-4.05 未対応。




 
イヌでもわかるJavaScript講座 お品書き へ戻ります