Core JavaScript 1.5 Guide:Predefined Core Objects:Date Object
出典: MDC
[編集] Date オブジェクト
JavaScript には日付を表すデータ型がありません。しかしながら、Date オブジェクトとそのメソッドを使用することで、アプリケーションで日付と時刻を扱うことができます。Date オブジェクトには日付をセット、取得、操作するためのメソッドがたくさんあります。プロパティは一切ありません。
JavaScript は Java と同じように日付を扱います。2 つの言語には共通する日付に関するメソッドが多くあります。また、両言語ともに日付を 1970 年 1 月 1 日 00:00:00 からのミリ秒数として保持します。
Date オブジェクトの範囲は 1970 年 1 月 1 日 (UTC) を基準に -100,000,000 日から 100,000,000 日です。
Date オブジェクトは次のようにして作成します。
dateObjectName = new Date([parameters])
ここで dateObjectName は作成する Date オブジェクトの名前です。すなわち、新しいオブジェクトの名前か、既存のオブジェクトのプロパティ名です。
上記の構文で、parameters は次のどの形式で指定してもかまいません。
- 引数なし:今日の日付と時刻を作成する。例えば、
today = new Date()。 - 次の形式 "月 日, 年 時:分:秒" で日付を表した文字列。例えば、
Xmas95 = new Date("December 25, 1995 13:30:00")。時、分、または秒を省略するとその値はゼロにセットされる。 - 年、月、日を表す整数値のセット。例えば、
Xmas95 = new Date(1995,11,25)。 - 年、月、日、時、分、秒を表す整数値のセット。例えば、
Xmas95 = new Date(1995,11,25,9,30,0)。
JavaScript 1.2 以前
Date オブジェクトは次のように振る舞います。
- 1970 年より前の日付は許されない。
- JavaScript はプラットフォーム特有の日付の便宜や挙動に依存する。つまり、
Dateオブジェクトの挙動はプラットフォームごとに異なる。
[編集] Date オブジェクトのメソッド
Date オブジェクトの日付や時刻を扱うメソッドは、大まかに次のカテゴリに分けることができます。
- "set" メソッド:日付や時刻の値を
Dateオブジェクトにセットする。 - "get" メソッド:
Dateオブジェクトから日付や時刻の値を取得する。 - "to" メソッド:
Dateオブジェクトから文字列の値を返す。 - parse および UTC メソッド:
Date文字列をパースする。
"get" および "set" メソッドを用いることで、秒、分、時、日にち、曜日、月、年を別々に取得したりセットしたりすることができます。曜日を返す getDay メソッドというものがありますが、これに対応する setDay メソッドというものはありません。なぜならば、曜日は自動的にセットされるからです。これらのメソッドはこれらの値を表すのに整数を用います。
- 秒および分:0 から 59
- 時:0 から 23
- 曜日:0(日曜)から 6(土曜)
- 日にち:1 から 31
- 月:0(1 月)から 11(12 月)
- 年:1900 年から数えた年
例えば、次の日付を定義したとします。
Xmas95 = new Date("December 25, 1995")
すると、Xmas95.getMonth() は 11 を返し、Xmas95.getFullYear() は 1995 を返します。
getTime メソッドや setTime メソッドは日付を比較するのに便利です。getTime メソッドは 1970 年 1 月 1 日 00:00:00 からのミリ秒数を返します。
例えば、次のコードはその年の残りの日数を表示します。
today = new Date() endYear = new Date(1995,11,31,23,59,59,999) // 日と月をセット endYear.setFullYear(today.getFullYear()) // 今年が何年かをセット msPerDay = 24 * 60 * 60 * 1000 // 1 日のミリ秒数をセット daysLeft = (endYear.getTime() - today.getTime()) / msPerDay daysLeft = Math.round(daysLeft) // その年の残り日数を返す
この例では今日の日付を保持する today という名前の Date オブジェクトを作成します。そして endYear という名前の Date オブジェクトを作成し、その年が何年かという値をセットします。さらに、1 日のミリ秒数を用いて今日と endYear の間の日数を算出します。これには getTime を使用し、さらに全体の日数に丸めます。
parse メソッドは、日付を表す文字列から既存の Date オブジェクトに値を代入するのに便利です。例えば、次のコードは parse と setTime を用いて日付の値を IPOdate オブジェクトに代入します。
IPOdate = new Date()
IPOdate.setTime(Date.parse("Aug 9, 1995"))
[編集] Date オブジェクトの使用例
次の例では、関数 JSClock() はデジタル時計のような形式で時刻を返します。
function JSClock() {
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var temp = "" + ((hour > 12) ? hour - 12 : hour)
if (hour == 0)
temp = "12";
temp += ((minute < 10) ? ":0" : ":") + minute
temp += ((second < 10) ? ":0" : ":") + second
temp += (hour >= 12) ? " P.M." : " A.M."
return temp
}
JSClock 関数はまず time という新しい Date オブジェクトを作成します。引数は与えられないため、現在の日付と時刻から time が作成されます。そして getHours、getMinutes および getSeconds メソッドを呼び出し、現在の時間、分、秒の値を hour、minute、second にそれぞれ代入します。
その次の 4 つの文はその時刻を元に文字列の値を構築します。最初の文は変数 temp を作成し、それに条件式を用いて値を代入します。hour が 12 よりも大きい場合は (hour - 12) を、それ以外の場合は単純に hour をそれぞれ代入します。ただし hour が 0 の場合は 12 とします。
その次の文は minute の値を temp に付け加えます。minute の値が 10 より小さい場合、条件式は区切りのコロンと分の先頭のゼロを追加し、そうでない場合は区切りのコロンだけを追加します。そして同様にして秒の値を temp に付け加えます。
最後に、条件式は hour が 12 以上の場合は "PM" を、そうでない場合は "AM" をそれぞれ temp に付け加えます。