以前、日時設定が簡単になるライブラリ「Moment.js」を紹介しました。
実際に仕事で使っていて日付関連のコーディング時間がかなり短縮できたのでとっても便利です。
今回は実際によく使った機能を紹介していきます。
目次 [非表示]
よく使う5つの機能
1.指定月の月末を取得する
javascriptの場合Dateクラスを使うことになります。
ただ、Dateクラスは月の始まりが0なので常に気を付けておかないといけないので面倒です。
MomentのdaysInMonth()を使えば簡単に月末を取得できます。
1 2 3 4 5 6 7 8 9 10 | //2017年7月の月末を取得する場合var year = 2017;var month = 7;//Dateクラスを使う場合//monthを+1する必要があるnew Date(year ,(month+1), 0).getDate();//Momentを使う場合は、daysInMonth()でOKmoment(year+"-"+month, "YYYY-MM").daysInMonth(); |
2.フォーマットを直す
日本だとYYYY-MM-DD形式かYYYY/MM/DD形式が多いと思いますが、海外だとMM/DD/YYYY とかDD/MM/YYYY形式だったりします。
仮にほかの形式のデータであっても、Momentであれば簡単にYYYY-MM-DDに直すことができます。
1 2 3 4 5 6 7 8 9 | // 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行で日付の存在チェックができます。
うるう年のチェックなんかもできるのでかなり便利です。
1 2 3 4 5 | // 存在する日付の場合、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 | ミリ秒 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 日付を指定var date_str = "2017-01-01 00:00:00";// 1日足す 2017-01-02 00:00:00console.log(moment(date_str).add(1, 'days').format('YYYY-MM-DD HH:mm:ss'));// 1日減らす 2016-12-31 00:00:00console.log(moment(date_str).subtract(1, 'days').format('YYYY-MM-DD HH:mm:ss'));// 1日と1時間足す 2017-01-02 01:00:00console.log(moment(date_str).add(1, 'days').add(1, 'hours').format('YYYY-MM-DD HH:mm:ss'));// 1日と1時間減らす 2016-12-30 23:00:00console.log(moment(date_str).subtract(1, 'days').subtract(1, 'hours').format('YYYY-MM-DD HH:mm:ss')); |
5.日付の差分を求める
Momentでは日付の差分も簡単に求めることができます。
比較したい日付をmometでオブジェクトにしてから、diff()を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | var a = moment('2017-10-01');var b = moment('2017-01-01');//差分を求める(年) a - bconsole.log(a.diff(b, 'years'));//差分を求める(月) a - bconsole.log(a.diff(b, 'months'));//差分を求める(日) a - bconsole.log(a.diff(b, 'days'));//差分を求める(時間) a - bconsole.log(a.diff(b, 'hours'));//差分を求める(分) a - bconsole.log(a.diff(b, 'minutes'));//差分を求める(秒) a - bconsole.log(a.diff(b, 'seconds'));//小数点単位で求めたい場合は第3引数にtrueを記述console.log(a.diff(b, 'years', true));//第2引数を省略するとミリ秒単位で表示console.log(a.diff(b)); |