Visit Mozilla.org

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 オブジェクトに値を代入するのに便利です。例えば、次のコードは parsesetTime を用いて日付の値を 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 が作成されます。そして getHoursgetMinutes および getSeconds メソッドを呼び出し、現在の時間、分、秒の値を hourminutesecond にそれぞれ代入します。

その次の 4 つの文はその時刻を元に文字列の値を構築します。最初の文は変数 temp を作成し、それに条件式を用いて値を代入します。hour が 12 よりも大きい場合は (hour - 12) を、それ以外の場合は単純に hour をそれぞれ代入します。ただし hour が 0 の場合は 12 とします。

その次の文は minute の値を temp に付け加えます。minute の値が 10 より小さい場合、条件式は区切りのコロンと分の先頭のゼロを追加し、そうでない場合は区切りのコロンだけを追加します。そして同様にして秒の値を temp に付け加えます。

最後に、条件式は hour が 12 以上の場合は "PM" を、そうでない場合は "AM" をそれぞれ temp に付け加えます。

« »