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