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