初版2013/01/17: 最終更新日2014/01/11
  Date
目次
Date
Dateクラスのメソッドとフォーマット
Dateクラスのオブジェクトか調べる
Dateのprototype
Date
JavaScriptのクラスでDateというのがあります。これは日付と時刻が格納されているクラスです。
Dateクラスの宣言は以下のように宣言します。

var date = new Date();

DateクラスのgetTimeメソッドは1970年1月1日午前00:00:00とDate オブジェクトに格納されている時刻値との差をミリ秒単位で返しますので、ランダム値として良く使うかもしれません。記述方法は以下のようにします。

date.getTime();

setFullYearメソッドも良く使います。システムがいつまで稼動するかをsetFullYearで指定しておき、現在日付と比較する、といった場合です。
第2引数は月を指定します(省略可能)が、基底値は0(1月)です。以下、setFullYearの例です。



以下、ソースです。

<script type="text/javascript">
<!--
function b(){
    var date1 = new Date();
    var date2 = new Date();
    date1.setFullYear(2099,0,1);

    if(date2 < date1){
        alert("date1 = " + date1);
        alert("date2 = " + date2);
    }
}
//-->
</script>

Dateクラスのメソッドとフォーマット
Dateクラスのメソッド一覧です。
getMonth()は月(0~11)を表示します。戻り値はnumber型です。
getDate()は日にち(0~31)を表示します。戻り値はnumber型です。
getHours()は分(0~59)を表示します。戻り値はnumber型です。
getMinutes()は分(0~59)を表示します。戻り値はnumber型です。
getSeconds()は秒数(0~59)を表示します。戻り値はnumber型です。
全て戻り値がnumber型のため、(new Date()).lengthとしても長さは表示されずにundefinedが返ってきます。

秒数が1桁の場合、前ゼロを付けたい場合がありますが、戻り値は1桁になります。
以下のボタンを押すとsetIntervalで1秒ごとにDateをインスタンス化して秒数を表示しています。
秒数が常に2桁になるようにフォーマットしています。具体的には前ゼロをつけてから文字列の右2桁を秒数にして表示しているだけです。




以下、ソースです。

<script type="text/javascript">
<!--
function cd(){
    setInterval("ef()",1000);
}

function ef(){
    var dt2 = new Date();
    var ss2 = "0" + dt2.getSeconds();// 前ゼロと連結して文字列型にする
    ss2 = ss2.substr(ss2.length-2,2);
    document.getElementById("ss2").innerHTML = ss2;
}
//-->
</script>

上記のようにフォーマットすることができますが、getMonth()だけ0~11が返ってくるため+1する必要があります。
以下のように実装するとします。



<script type="text/javascript">
<!--
function ab(){
	var dt = new Date();
	var ss = "0" + dt.getMonth() + 1;// 前ゼロと連結して文字列型にする
	alert(ss);
}
//-->
</script>

1月なら001、2月なら011、3月なら021・・というように表示されると思います。
これは前ゼロが文字列のため、getMonth()と足したと同時に文字列になります。それに対して+1しているの文字列連結になるため、足し算は行われていません。
このため、以下のように括弧を使って足し算をしてから前ゼロの文字列連結する必要があります。


<script type="text/javascript">
<!--
function ab(){
	var dt = new Date();
	var ss = "0" + (dt.getMonth() + 1);// 足し算してから、前ゼロと連結して文字列型にする
	alert(ss);
}
//-->
</script>

Dateクラスのオブジェクトか調べる
Dateクラスのオブジェクトか調べるにはconstructorプロパティを使用します。
以下、例です。



以下、ソースです。

<input type="button" value="ボタン" onclick="c();" />
<script type="text/javascript">
<!--
function c(){
    var date = new Date();
    if(date.constructor == Date){
        alert("date型です");
    }
}
//-->
</script>

Dateのprototype
JavaScriptではオーバーロードはできませんがprototypeプロパティを使って組み込みオブジェクトにメソッドを追加することができます。
DateクラスのgetDayは曜日によって1~7を返します。
これを曜日によって「月」、「火」、「水」、、というように返すメソッドを追加します。
prototypeプロパティを使用してメソッドを追加するには以下のように記述します。

Date.prototype.メソッド名 = function () {
    // 具体的な処理
}

オーバーライドはできませんので、メソッド名にgetDayとするとMaximum call stack size exceededとエラーが出ます。
そのため、getDayExとしています。以下、例です。



以下、ソースです。

<script type="text/javascript">
<!--
Date.prototype.getDayEx = function () {
    var date = new Date();
    var i = date.getDay();
    if(i == 1){
        return "月";
    }else if(i == 2){
        return "火";
    }else if(i == 3){
        return "水";
    }else if(i == 4){
        return "木";
    }else if(i == 5){
        return "金";
    }else if(i == 6){
        return "土";
    }else if(i == 7){
        return "日";
    }

    return "";
}
function f(){
    var mydate = new Date();
    alert(mydate.getDayEx());
}
//-->
</script>