【JavaScript】日付/時刻データを操作する(Dateオブジェクト)
はいはいどんどん行きます!
Dateオブジェクトを生成する
Dateオブジェクトには他の文字列や配列などのように
リテラル表現は存在しない
オブジェクト生成には
必ずコンストラクタを経由する必要がある
はいはい出てきましたコンストラクタ
オブジェクトには、オブジェクトを初期化するために
オブジェクトと同名のメソッドが用意されている
この初期化メソッドのことをコンストラクタという
そうそうそうでした
この説明だけ読んでも訳が分からなかったのだけれど
なんかちょっとわかりそうな気がしてきたぞ
Dateオブジェクトのコンストラクタには以下4つがある
var d = new Date(); var d = new Date('2012/01/30'); var d = new Date(2012, 0, 30, 14, 29, 50, 500); var d = new Date(1217862000000);
デフォルトのDateオブジェクトを生成する
Dateオブジェクトは
デフォルトで生成された時点でのシステム日付をセットする
var d = new Date('2012/01/30');
日付文字列をもとにDateオブジェクトを生成する
ここでは「2012/01/30」という形式で日付を指定しているが
他にも「Mon Jan 30 2012 14:15:30」のような
英文形式で指定することもできる
var d = new Date(2012, 0, 30, 14, 29, 50, 500);
年月日/時分秒/ミリ秒の形式で指定したい場合は
この構文を利用する
この場合時分秒、ミリ秒は省略可能
月の指定が1~12でなく0~11で行う点に注意
var d = new Date(1217862000000);
1970/01/01 00:00:00からの
経過ミリ秒(タイムスタンプ値)で指定する方法
タイムスタンプを取得する方法は後述する
状況に応じてつかいわけるべし、はい!
Dateオブジェクトで利用可能なメンバ
ローカル(取得)
- getFullYear()
- 年(4桁)
- getMonth()
- 月(0~11)
- getDate()
- 日(1~31)
- getDay()
- 曜日(0:日曜~6:土曜日)
- getHours()
- 時(0~23)
- getMinutes()
- 分(0~59)
- getSeconds()
- 秒(0~59)
- getMilliseconds()
- ミリ秒(0~999)
- getTime()
- 1970/01/01 00:00:00からの経過ミリ秒
- getTimezoneOffset()
- 協定世界時との時差
var dat = new Date(); document.writeln(dat); //Mon Jan 30 2012 15:20:10 GMT+0900 document.writeln(dat.getFullYear()); //2012 document.writeln(dat.getMonth()); //0 document.writeln(dat.getDate()); //30 document.writeln(dat.getDay()); //1(月曜) document.writeln(dat.getHours()); //15 document.writeln(dat.getMinutes()); //20 document.writeln(dat.getSeconds()); //10 document.writeln(dat.getMilliseconds()); //587 document.writeln(dat.getTime()); //1327904410587 document.writeln(dat.getTimezoneOffset()); //-540
ローカル(設定)
- setFullYear(y)
- 年(4桁)
- setMonth(m)
- 月(0~11)
- setDate(d)
- 日(1~31)
- setHours(h)
- 時(0~23)
- setMinutes(m)
- 分(0~59)
- setSeconds(s)
- 秒(0~59)
- setMilliseconds(ms)
- ミリ秒(0~999)
- setTime(ts)
- 1970/01/01 00:00:00からの経過ミリ秒
var dat = new Date(); document.writeln(dat); //Mon Jan 30 2012 15:31:58 GMT+0900 dat.setFullYear(2010); dat.setMonth(4); dat.setDate(9); dat.setHours(8); dat.setMinutes(30); dat.setSeconds(25); dat.setMilliseconds(100); document.writeln(dat); //Sun May 09 2010 08:30:25 GMT+0900
協定時(取得)
- getUTCFullYear()
- 年(4桁)
- getUTCMonth()
- 月(0~11)
- geUTCtDate()
- 日(1~31)
- getUTCDay()
- 曜日(0:日曜~6:土曜日)
- getUTCHours()
- 時(0~23)
- getUTCMinutes()
- 分(0~59)
- getUTCSeconds()
- 秒(0~59)
- getUTCMilliseconds()
- ミリ秒(0~999)
var dat = new Date(); document.writeln(dat); //Mon Jan 30 2012 15:36:51 GMT+0900 document.writeln(dat.getUTCFullYear()); //2012 document.writeln(dat.getUTCMonth()); //0 document.writeln(dat.getUTCDate()); //30 document.writeln(dat.getUTCDay()); //1(月曜) document.writeln(dat.getUTCHours()); //6 document.writeln(dat.getUTCMinutes()); //36 document.writeln(dat.getUTCSeconds()); //51 document.writeln(dat.getUTCMilliseconds()); //129
協定時(設定)
- setUTCFullYear(y)
- 年(4桁)
- setUTCMonth(m)
- 月(0~11)
- setUTCDate(d)
- 日(1~31)
- setUTCHours(h)
- 時(0~23)
- setUTCMinutes(m)
- 分(0~59)
- setUTCSeconds(s)
- 秒(0~59)
- setUTCMilliseconds(ms)
- ミリ秒(0~999)
解析
- parse(dat)
- 日時文字列を解析し、1970/01/01 00:00:00からの経過ミリ秒を取得
- 静的メソッド
- UTC(y, m, d[,h [,mm [,s [,ms]]]])
- 日付情報をもとに1970/01/01 00:00:00からの経過ミリ秒を取得(協定時)
- 静的メソッド
document.writeln(Date.parse('1986/09/23')); //527785200000 document.writeln(Date.UTC(1986, 9, 23)); //530409600000
文字列変換
- toGMTSString()
- グリニッジ標準時を文字列として取得
- toUTCString()
- 世界協定時を文字列として取得
- toLocaleString()
- ローカル時を文字列として取得
- toDateString()
- 日付部分を文字列として取得
- toTimeString()
- 時刻部分を文字列として取得
- toLocaleDateString()
- 地域情報に従って、日付部分を文字列として取得
- toLocaleTimeString()
- 地域情報に従って、時刻部分を文字列として取得
- toString()
- 日時を文字列として取得
協定世界時とは国際的な協定で決められている公式時刻のこと
通常はグリニッジ標準時とほとんど同義だと思っておいて良い
(厳密には協定世界時は閏秒を加味している分だけ
グリニッジ標準時とは異なる)
日付/時刻データを加算/減算する
Dateオブジェクトでは、日付/時刻を
直接加算/減算するためのメソッドは用意されていない
このような計算を行うには
setXxxxxを利用して以下の手順で
個々の日付/時刻要素に加算/減算を行う必要がある
- getXxxxxメソッドで現在の日付/時刻要素を取得しておく
- 取得した値に加算/減算を行う
- さらにsetXxxxxメソッドで設定しなおす
以下具体例!
var dat = new Date(2010, 4, 15, 11, 40); document.writeln(dat.toLocaleString()); //2010年5月15日 11:40:00 dat.setMonth(dat.getMonth() + 3); //3ヶ月を加算 document.writeln(dat.toLocaleString()); //2010年8月15日 11:40:00 dat.setDate(dat.getDate() - 20); //20日を減算 document.writeln(dat.toLocaleString()); //2010年7月26日 11:40:00
ふむふむ
特定の要素に対する加算/減算の結果が
有効範囲を超えてしまっても
正しい日付に自動的に換算してくれる、べんりー!
この性質をつかって
その月の最終日を求めることもできる、ほう
var dat = new Date(2010, 4, 15, 11, 40); document.writeln(dat.toLocaleString()); //2010年5月15日 11:40:00 dat.setMonth(dat.getMonth() + 1); //来月の‥ dat.setDate(0); //0日目をセット document.writeln(dat.toLocaleString()); //2010年5月31日 11:40:00
なるほど‥「来月の0日目」はDateオブジェクトでは
「今月の最終日」になるわけですね、ふむふむ
日付/時刻の差分を求める
日付/時刻の差を求めるような処理に関しても
Dateオブジェクトは直接機能していないため
以下のようなコードを記述する必要がある
var dat1 = new Date(2010, 4, 15); //2010/05/15 var dat2 = new Date(2010, 5, 20); //2010/06/20 var diff = (dat2.getTime() - dat1.getTime()) / (1000 * 60 * 60 *24); document.writeln(diff + '日の差があります'); //36日の差があります
ここでは「2010/06/20」と「2010/05/15」との
日付差を計算している
日付差を求める場合にまず必要になるのが
2つの日付の経過ミリ秒である
経過ミリ秒を取得するのはgetTimeメソッドの役割
ここでは経過ミリ秒の差を求め
その値をもう一度日付に変換している
経過ミリ秒を日付に変換するのは以下公式できる
経過ミリ秒÷(1000ミリ秒×60秒×60分×24時間)
定型的な差分計算の例なので覚える必要あり
おぼえにくそうだ‥りょうかいしました‥
さてそろそろ疲れてきたぞ