1. d = new Date();
2. d = new Date("month day, year hours:minutes:seconds");
3. d = new Date(year, month, day);
4. d = new Date(year, month, day, hour, min, sec);
1 のフォーマットでは Date
オブジェクトは現在の日時で初期化されます。
2 〜 4 では指定した日時で初期化されます。
現地時間である。
2の month は "July" などと英語で書きます。
ただし、よく使われる3文字までの短縮形(例えば、"Jul")
はOKのようです。
3では時間は0時0分0秒に初期化されます。
3と4の year は2桁の場合は1900年代を表わします。
3と4の monthはCのtm構造体と同様に 0 〜 11 の値を取り、
0は1月を表わします。
くらいでしょう。
date.getTime();
Date.parse(dateString)
Date.UTC(year, month, day [, hrs] [, min] [, sec])
いずれも、標準時の1970年1月1日0時0分0秒から経過時間をmsで返します。これを用いて、以下のように日付の比較ができます。
var salemillisec = Date.parse("Nov, 5 1997 00:00:00");
var todaymillisec = (new Date()).getTime();
if(todaymillisec < salemillisec)
alert("4巻はまだ発売されていません");
else if(todaymillisec - 24 * 60 * 60 * 1000 < salemillisec)
alert("今日は4巻の発売日です");
else
alert("4巻はもう発売されました");
逆にシリアル値からDateオブジェクトの変換は
setTimeメソッドを用いて行ないます。
//今から1時間後の時刻をセットする
d.setTime((new Date()).getTime() + 60 * 60 * 1000);
d = new Date(70, 0, 1, 9, 0, 0);
alert(d * 1); //0
d = new Date(70, 0, 1, 9, 0, 1);
alert(d * 1); //1000
日本では時差
の関係で1970年1月1日9時0分0秒からの経過時間です。
この関係で Dateオブジェクトが取りうる値は、
いちおうこの時間からということになっています。
このことから Dateオブジェクト
も大小比較ができることが容易に想像できます。
var dsale = new Date(97, 11, 5); //発売日
var dtoday = new Date(); //今の時間
if(dtoday < dsale)
alert("4巻はまだ発売されていません");
//発売日の午前零時から24時間経過していなければ
else if(dtoday - 24 * 60 * 60 * 1000 < dsale)
alert("今日は4巻の発売日です");
else
alert("4巻はもう発売されました");
また、内部では ms 単位で値を保持しています
(実際にはOSに依存すると思われます)。
var isplaying = false;
var dstart, dend;
function test5(form) {
if(isplaying) { //2回目
dend = new Date();
//1回目との差をとる
form.text1.value = dend - dstart;
}
else //1回目
dstart = new Date();
isplaying = !isplaying;
}
ボタンを2回押してください。ボタンを押した間隔が ms 単位で表示されます。
ただしあまり速くボタンを押してはだめのようです。
var year = parseInt(form.text1.value);
var d = new Date(year, 2, 0); //その年の3月1日の前の日
alert(d.getDate() == 29
? "閏年ですわ" : "閏年ではありませんわ");
2000 などと年を表わす数字を入力してボタンを押してください。
その年の3月1日の前日が29日か否かで閏年の判定をしています。
getYear は1900年代は2桁、
その他ではそのままの数字が返ります。
getMonth は 0 〜 11 を返します。
getDay は 0 〜 6 を返し、
0 は日曜日、 1 は月曜日、 … を表わします。
//次の13日を得る
var d = new Date();
var m = d.getMonth();
if(d.getDate() < 13)
d.setMonth(m++);
d.setDate(13);
var next13serial = d.getTime(); //次の13日のシリアル値
for( ; d.getDay() != 5; m++) { //金曜日になるまで月を1増す
d.setTime(next13serial); //元に戻してから
d.setMonth(m); //次の月を設定する
}
alert("次の13日の金曜日は\n" + d.getYear() +
"年" + (d.getMonth() + 1) + "月13日 です");
設定系のメソッドは通常の範囲外の値をセットするときに注意が必要です。
例えば13月をセットするとその次の年の1月になります。
var d = new Date(2003, 4, 18); //2003/5/18
d.setMonth(12); //13月を設定
alert(d.toLocaleString()); //2004年1月18日 0:00:00
d.setMonth(12); //13月を設定
alert(d.toLocaleString()); //2005年1月18日 0:00:00
こういう場合、上のようにシリアル値を使うとよいです。
var d = new Date();
alert(d.toString());
alert(d.toLocaleString());
alert(d.toGMTString());
alert(d.getTimezoneOffset());
時差は分で返します。