316
294

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【JavaScript】日付処理

Last updated at Posted at 2015-11-30

##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 は罠が多すぎる

316
294
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
316
294

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?