Moment.js で簡単に日付操作する

Moment.js というライブラリがある。JavaScript のクセがある Date 型に対して、直感的に日付操作ができるライブラリだ。

特に日付のフォーマットが手軽なのでオススメだ。例えば現在の日時を「YYYY-MM-DD HH:mm:ss」という形式の文字列で取得する場合、生の JavaScript だと以下のような書き方になる。

var d = d.getFullYear()
var result = d.getFullYear()
  + '-' + ('0' + (d.getMonth() + 1)).slice(-2)
  + '-' + ('0' + d.getDate()).slice(-2)
  + ' ' + ('0' + d.getHours()).slice(-2)
  + ':' + ('0' + d.getMinutes()).slice(-2)
  + ':' + ('0' + d.getSeconds()).slice(-2);

必ず2桁で表現するために文字列 '0' を結合して slice(-2) で右から2桁を拾うようにしている。getMonth() に関しては0からのカウントなので + 1 する必要がある。

これを Moment.js で得るには以下のように書くだけだ。

var result = moment().format('YYYY-MM-DD HH:mm:ss');

moment() で生成できるオブジェクトは、内部的に Date オブジェクトを持っているので、Moment.js で操作してから結果を Date 型で得たりすることもできる。

var now = moment();
var nowDate = now.toDate();

また、moment() の引数に日付文字列を渡すとそれっぽく解釈してくれるので、型変換も楽チンである。

var d = moment('2017-06-04');

format() を使う際、HH だと24時間表記、hh だと12時間表記の時刻が返されるので、ご注意いただきたい (これで半日近く時刻が狂う問題に悩まされてしまった…)。