以前、日時設定が簡単になるライブラリ「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()でOK moment(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: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()を使います。
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 - 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)); |