コーディング時間を大幅短縮!Moment.jsでよく使う5つの機能

以前、日時設定が簡単になるライブラリ「Moment.js」を紹介しました。
実際に仕事で使っていて日付関連のコーディング時間がかなり短縮できたのでとっても便利です。
今回は実際によく使った機能を紹介していきます。

日時設定が簡単になる!「Moment.js」

2017.07.22

よく使う5つの機能

1.指定月の月末を取得する

javascriptの場合Dateクラスを使うことになります。
ただ、Dateクラスは月の始まりが0なので常に気を付けておかないといけないので面倒です。
MomentのdaysInMonth()を使えば簡単に月末を取得できます。

//2017年7月の月末を取得する場合
var year = 2017;
var month = 7;

//Dateクラスを使う場合
//monthを+1する必要がある
new Date(year ,(month+1), 0).getDate();

//Momentを使う場合は、daysInMonth()でOK
moment(year+"-"+month, "YYYY-MM").daysInMonth();

2.フォーマットを直す

日本だとYYYY-MM-DD形式かYYYY/MM/DD形式が多いと思いますが、海外だとMM/DD/YYYY とかDD/MM/YYYY形式だったりします。
仮にほかの形式のデータであっても、Momentであれば簡単にYYYY-MM-DDに直すことができます。

// MM-DD-YYYY形式の文字列
var date_str = '12-15-2017';

// momentのオブジェクトを生成するときに、
// 引数date_strがどんな形式なのかを指定する
var dateMoment = moment(date_str,'MM-DD-YYYY');

// YYYY-MM-DD形式に変換する
console.log(dateMoment.format('YYYY-MM-DD'));

3.日付の存在チェック

指定した日付が本当に存在するかチェックする場合、javascriptだと正規表現を使ったり、色々if文とかを駆使する必要があります。
MomentならisValid()を使うとたった1行で日付の存在チェックができます。
うるう年のチェックなんかもできるのでかなり便利です。

// 存在する日付の場合、trueが返される
console.log(moment('2016-02-29').isValid());

// 存在しない日付の場合、falseが返される
console.log(moment('2017-02-29').isValid());

4.日付の加算減算

javascriptでも1日後とか2日前とかは比較的簡単にできます。
ですが、1日と3時間後となると数行スクリプトを書く必要が出てきます。
その点Momentはチェインが使えるので簡単に計算することができます。
加算する場合はadd(数値,キー)
減算する場合はsubstract(数値,キー)を使います。
キーの一覧は以下の通りです。

キー キー(短縮) 説明
years y
quarters Q 4カ月
months M
weeks w
days d
hours h 時間
minutes m
seconds s
milliseconds ms ミリ秒
// 日付を指定
var date_str = "2017-01-01 00:00:00";

// 1日足す 2017-01-02 00:00:00
console.log(moment(date_str).add(1, 'days').format('YYYY-MM-DD HH:mm:ss'));

// 1日減らす 2016-12-31 00:00:00
console.log(moment(date_str).subtract(1, 'days').format('YYYY-MM-DD HH:mm:ss'));

// 1日と1時間足す 2017-01-02 01:00:00
console.log(moment(date_str).add(1, 'days').add(1, 'hours').format('YYYY-MM-DD HH:mm:ss'));

// 1日と1時間減らす 2016-12-30 23:00:00
console.log(moment(date_str).subtract(1, 'days').subtract(1, 'hours').format('YYYY-MM-DD HH:mm:ss'));

5.日付の差分を求める

Momentでは日付の差分も簡単に求めることができます。
比較したい日付をmometでオブジェクトにしてから、diff()を使います。

var a = moment('2017-10-01');
var b = moment('2017-01-01');

//差分を求める(年) a - b
console.log(a.diff(b, 'years'));
//差分を求める(月) a - b
console.log(a.diff(b, 'months'));
//差分を求める(日) a - b
console.log(a.diff(b, 'days'));
//差分を求める(時間) a - b
console.log(a.diff(b, 'hours'));
//差分を求める(分) a - b
console.log(a.diff(b, 'minutes'));
//差分を求める(秒) a - b
console.log(a.diff(b, 'seconds'));
//小数点単位で求めたい場合は第3引数にtrueを記述
console.log(a.diff(b, 'years', true));
//第2引数を省略するとミリ秒単位で表示
console.log(a.diff(b));

関連記事

日時設定が簡単になる!「Moment.js」

2017.07.22