JavaScript

レシピ

日付・時間

指定した日時のDateインスタンスを作る

パラメータやセッターメソッドを使って、指定した時刻のDateオブジェクトのインスタンスを作成する方法について解説します。

この記事のポイント

  • 時間の指定はDateオブジェクトのインスタンス作成時と、後からセッターメソッドを使う方法がある
  • 「2020年4月1日」など日本語を含む文字列では時間指定ができない
  • タイムスタンプを使うと一回で時間を指定できるため便利

目次

パラメータに年月日時分秒の値を渡して時間を設定する

Dateオブジェクトはパラメータを渡さずにインスタンスを作成すると現時刻が設定されますが、パラメータとして年月日時分秒を指定するとその日時の情報を持ったインスタンスを作成することができます。

パラメータは先頭から年、月、日、時、分、秒、ミリ秒を指定することができます。
もちろん全てを指定する必要はなく、必要に応じて指定を省略することが可能です。
ただし、最低でも年と月の2つは指定する必要があります。

コード例

// パターン1:年のみ指定
console.log(new Date( 2015));
// Thu Jan 01 1970 09:00:02 GMT+0900

// パターン2:年月を指定
console.log(new Date( 2015, 0));
// Thu Jan 01 2015 00:00:00 GMT+0900

// パターン3:月に12を超える値を指定
console.log(new Date( 2015, 15));
// Fri Apr 01 2016 00:00:00 GMT+0900

// パターン4:年月日を指定
console.log(new Date( 2015, 0, 20));
// Tue Jan 20 2015 00:00:00 GMT+0900

// パターン5:日に月の日数を超える値を指定
console.log(new Date( 2015, 0, 40));
// Mon Feb 09 2015 00:00:00 GMT+0900

// パターン6:年月日時を指定
console.log(new Date( 2015, 0, 20, 14));
// Tue Jan 20 2015 14:00:00 GMT+0900

// パターン7:時に24を超える値を指定
console.log(new Date( 2015, 0, 20, 25));
// Wed Jan 21 2015 01:00:00 GMT+0900

// パターン8:年月日時分を指定
console.log(new Date( 2015, 0, 20, 9, 30));
// Tue Jan 20 2015 09:30:00 GMT+0900

// パターン9:分に60を超える値を指定
console.log(new Date( 2015, 0, 20, 9, 75));
// Tue Jan 20 2015 10:15:00 GMT+0900

// パターン10:年月日時分秒を指定
console.log(new Date( 2015, 0, 20, 9, 30, 45));
// Tue Jan 20 2015 09:30:45 GMT+0900

// パターン11:秒に60を超える値を指定
console.log(new Date( 2015, 0, 20, 9, 30, 85));
// Tue Jan 20 2015 09:31:25 GMT+0900

// パターン12:秒に負の値を指定
console.log(new Date( 2015, 0, 20, 9, 30, -30));
// Tue Jan 20 2015 09:31:25 GMT+0900

// パターン13:ミリ秒を指定
console.log(new Date( 2015, 0, 20, 9, 30, 40, 55));

パターン3、パターン5、パターン7、パターン9、パターン11のように時間の単位の上限値を超えて指定すると、超過した分だけ繰り上げた時刻を取得することができます。
例えば「10時59分」に対して秒を「80」とすると、「11時00分20秒」のようになります。

反対に、パターン12のように負の値を指定すると遡った時間を得ることができます。
「2015年1月1日 00:00」の時刻に対して秒に「-30」を指定すると、「2014年12月31日 23:59:30」を取得します。

パラメータに時間の文字列を渡して時間を設定する

Dateオブジェクトのインスタンス作成時に渡すパラメータは数値のみでなく、特定のフォーマットであれば文字列で指定することも可能です。
以下のコードではいくつかのパターンで指定しています。

コード例

// パターン1:yyyy-mm-ddThh:mm:ss
console.log(new Date('2000-04-01T18:39:00'));
// Sat Apr 01 2000 18:39:00 GMT+0900 (日本標準時)

// パターン2:yyyy/mm/dd
console.log(new Date('2000-04-01'));
// Sat Apr 01 2000 09:00:00 GMT+0900 (日本標準時)

// パターン3:yyyy/mm/dd hh
console.log(new Date('2000-04-01 12'));
// Invalid Date

// パターン4:yyyy/mm/dd hh:mm
console.log(new Date('2000-04-01 10:00'));
// Sat Apr 01 2000 10:00:00 GMT+0900 (日本標準時)

// パターン5:yyyy-mm-dd hh:mm:ss
console.log(new Date('2000-04-01 05:43:21'));
// Sat Apr 01 2000 05:43:21 GMT+0900 (日本標準時)

// パターン6:yyyy/mm/dd hh:mm:ss
console.log(new Date('2000/05/01 06:20:00'));
// Mon May 01 2000 06:20:00 GMT+0900 (日本標準時)

// パターン7:Month d, yyyy hh:mm:ss
console.log(new Date('July 1, 2000 07:15:30'));
// Sat Jul 01 2000 07:15:30 GMT+0900 (日本標準時)

// パターン8:m d, yyyy hh:mm:ss
console.log(new Date('8 3, 1995 08:05:20'));
// Thu Aug 03 1995 08:05:20 GMT+0900 (日本標準時)

// パターン9:mm dd, yyyy hh:mm:ss
console.log(new Date('09 08, 1994 09:00:00'));
// Thu Sep 08 1994 09:00:00 GMT+0900 (日本標準時)

// パターン10:yyyy年mm月dd日
console.log(new Date('2020年5月29日'));
// Invalid Date

// パターン11:yyyy年mm月dd日 hh:mm:ss
console.log(new Date('2020年5月29日 19:49:46'));
// Invalid Date

パターン3、パターン10、パターン11は「Invalid Date」となりインスタンス作成に失敗しています。
以上の結果から、日本語の表記を含む日付はパラメータとして指定することはできません。

パラメータにタイムスタンプを渡して時間を設定する

Dateオブジェクトのインスタンス作成時にタイムスタンプで時間を指定することもできます。

コード例

// 現在のタイムスタンプを取得
var timestamp = Date.now();

// タイムスタンプから時間を差し引く(値は適当です)
timestamp -= 18000000;

console.log(new Date(timestamp));
// Fri May 29 2020 15:50:47 GMT+0900

セッターメソッドで時間を設定する

Dateオブジェクトには時間を設定するためのメソッド(セッターメソッド)が用意されており、すでに作成したインスタンスでセッターメソッドを実行することで時間を設定することもできます。

コード例

// 現時刻でDateオブジェクトのインスタンス作成
var date = new Date();
console.log(date);
// Fri May 29 2020 20:25:57 GMT+0900 (日本標準時)

// 年月日を設定
date.setFullYear(1990);
date.setMonth(2);
date.setDate(1);

console.log(date);
// Thu Mar 01 1990 20:25:57 GMT+0900 (日本標準時)

// 時分秒を設定
date.setHours(10);
date.setMinutes(25);
date.setSeconds(30);

console.log(date);
// Thu Mar 01 1990 10:25:30 GMT+0900 (日本標準時)

3回時刻を出力しています。
1回目の出力は、パラメータを指定せずに現時刻でDateオブジェクトのインスタンスを作成した直後の時間です。

その後、年月日をそれぞれのセッターメソッドで指定して2回目の出力をすると、設定した時間に更新されていることを確認することができます。
なお、「月」はgetMonthメソッドと同様に値が「0」から始まることに注意してください。
今回は「2」を指定しているので「3月」になります。

続いて、時分秒のセッターメソッドを実行して3回目の出力をしています。
すると、年月日に加えて時分秒も指定した時間に更新されたことが確認できます。

セッターメソッドとタイムスタンプで時間を設定する

ここまでは日時をそれぞれのセッターメソッドで設定してきましたが、タイムスタンプを使って一括で指定することも可能です。

// 現時刻でDateオブジェクトのインスタンス作成
var date = new Date();
console.log(date);
// Fri May 29 2020 21:13:01 GMT+0900 (日本標準時)

date.setTime(1500000000000);
console.log(date);
// Fri Jul 14 2017 11:40:00 GMT+0900 (日本標準時)

1回目の出力ではDateオブジェクトのインスタンスを作成したタイミングの現時刻が表示され、2回目の出力ではsetTimeメソッドを使ってタイムスタンプで設定した時間を表示します。
タイムスタンプを使うことで年月日などを個別に指定することなく、任意の時刻を設定することができるため非常に便利です。

日付を月初・月末に設定する

セッターメソッドを使って、月初と月末の日付に設定します。
例では「2020年4月」の月初と末日を設定していますが、1月や12月など他の月でも同じように設定することが可能です。

コード例

// Dateオブジェクトのインスタンス作成
var date = new Date('2020/4/5 10:00:00');

// 現在の日付を出力
var options = { weekday: 'short', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', second:'numeric' };
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2020年4月5日(日) 10:00:00

// 月初に設定
date.setDate(1);
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2020年4月1日(水) 10:00:00

// 月末に設定
date.setMonth( date.getMonth()+1, 0);
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2020年4月30日(木) 10:00:00

月初はsetDateメソッドに1日の「1」を渡すだけのシンプルな設定です。

月末は月によって日数が異なるため、設定にはsetMonthメソッドを使って「次月の月初より1日前」というやや遠回りな指定をします。

setMonthメソッドの第1パラメータには「date.getMonth()+1」で次月を指定し、第2パラメータには1日の前日である「0」を指定します。
日付に「0日」は存在しないため、月初の前日にあたる先月末を設定することができます。
今回の例では「5月1日」の前日にあたる「4月末日」の設定になります。

時間の出力についてはtoLocaleDateStringメソッドを使って行います。
このメソッドはパラメータに言語コードやフォーマットを渡すことで指定したフォーマットで日付を出力することができます。

日付を年始・年末に設定する

セッターメソッドを使って年始と年末の日付に設定します。
以下の例では「2010年」の月初と末日を設定していますが、年始は「1月1日」、年末は「12月31日」というのはどの年も固定になので同じ方法で設定できます。

コード例

// インスタンス作成
var date = new Date('2010/4/5 10:00:00');

// 現在の日付を出力
var options = { weekday: 'short', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', second:'numeric' };
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2010年4月5日(月) 10:00:00

// 年始に設定
date.setMonth(0,1);
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2010年1月1日(金) 10:00:00

// 年末に設定
date.setMonth(11,31);
console.log(date.toLocaleDateString( 'ja-JP', options));
// 2010年12月31日(金) 10:00:00

月を設定するsetMonthメソッドでそれぞれ設定をします。
「日」については1日が1から始まりますが、「月」は1月が0で始まるため、指定についても1月1日は「0,1」、12月31日は「11,31」という指定になります。

時間の出力については月初・月末と同様にtoLocaleDateStringメソッドを使っています。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。