Help us understand the problem. What is going on with this article?

【JavaScript】日付処理

More than 1 year has passed since last update.

Dateクラスの関数またはコンストラクタ呼出し

下記以外にも形式あるらしいが割愛。

new Date()
現在時刻のDateインスタンス

new Date(year,month,date,hours,minutes,secounds)
引数の指定時刻のDateインスタンス
monthの指定は0始まりなことに注意!

//2017年1月15日 22時30分
new Date(2017,0,15,22,30)

new Date(value)
引数をエポックミリ秒に解釈したDateインスタンス

Date()
現在時刻の文字列

インスタンスから各種値の取得

インスタンスはエポックタイムで時刻を保持していて、文字列や数値として取り出すときにロケールやタイムゾーンに合わせて変換される。

以下は全て全てローカル時刻。UTCも表示できるが割愛。

js
var dt = new Date();

//年
var year = dt.getFullYear();

//月
//1月が0、12月が11。そのため+1をする。
var month = dt.getMonth()+1;

//日
var date = dt.getDate();

//曜日
//日曜が0、土曜日が6。配列を使い曜日に変換する。
dateT = ["","","","","","",""];
var day = dateT[dt.getDay()];

//時
var hours = dt.getHours();

//分
var minutes = dt.getMinutes();

//秒
var seconds = dt.getSeconds();

インスタンスへ各種値の設定

規定値の範囲を超えると繰り越される。例えば、setMonthで12を設定すると0となる。(11が12月なので0は1月)
逆に規定値の範囲を下回ると戻る。setMonthで-1を設定すると10になる。
これは日付の加算減算に利用される。

js
var dt = new Date();

//年
dt.setFullYear(2015);

//月
//1月が0、12月が11。
dt.setMonth(10);

//日
dt.getDate(30);

//曜日
//日曜が0、土曜日が6。
dt.getDay(1)

//時
dt.getHours(21);

//分
dt.getMinutes(30);

//秒
dt.getSeconds(15);

日付の加算減算

月の加算減算、さらに日付の加算減算は月によって日数が違ったりうるう年などあるため単純に計算するのは難しい。set系のプロパティを使って計算すると簡単にできる。

月、日、時間、分を足したり引いたりするだけ。

js
var dt = new Date();

//3か月後
dt.setMonth(dt.getMonth() + 3);

//3か月前
dt.setMonth(dt.getMonth() - 3);

//3日後
dt.setDate(dt.getDate() + 3);

//3時間後
dt.setHours(dt.getHours() + 3);

//3分後
dt.setMinutes(dt.getMinutes() + 3);

日付の差分

getTime()でエポックミリ秒を取得して差分を出す。それを割って変換。
小数を四捨五入するか切り捨てるかはその時次第。

年、週、日、時、分、秒、ミリ秒の場合。

var diff = dst.getTime() - src.getTime();
//秒
var second = diff/1000;

//分
var minute = diff/1000*60;

//時
var hour = diff/1000*60*60;

//日
var day = diff/1000*60*60*24;

//年
var day = diff/1000*60*60*24*365;

月の場合

参考を参照。

参考:2 つの Date 間の差分を求める

Dateクラスのスタティックなプロパティ

newとかしなくても使えるプロパティ。

now()
現在時刻のエポックミリ秒を返す

parse(string)
引数の文字列をパースしてエポックミリ秒を返す

比較

getTime()でエポック秒を取得して比較する
オブジェクトの比較は大小は日付の比較となるが、==や===がオブジェクト自体比較となるため

if(date1.getTime() > date2.getTime(){

}

その他

日付を扱うならmoment.jsが便利らしい。

参考
JavaScript の Date は罠が多すぎる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away