JavaScriptの時刻の扱いが3倍くらい楽になるMoment.js

JavaScriptの時刻オブジェクトといえばDateですが、扱いが少し面倒くさい場合があります。Moment.jsというライブラリを使うと、かなり楽になります。
スクリーンショット 2013-08-26 23.56.20
Moment.js

JavaScriptのDateオブジェクトと即変換できる

Momentのオブジェクトは、いつでもJavaScriptのDateオブジェクトに変換できます。

moment().toDate();

逆にJavaScriptのDateオブジェクトからMomentオブジェクトに変換するのも一発です。

moment(new Date());

既存のシステムとの繋ぎの部分は、JavaScriptのDateオブジェクトに変換することで対応できるので、すぐにMomentを組み込み可能です。

フォーマットが柔軟

JavaScriptのDateオブジェクトは、文字列を引数に渡すと、パースしてくれるのですが、パース可能な文字列に制限があります。
「使いにくいな」と感じるのは、次のようなDB形式の文字列がパースエラーとなることです。

new Date('2013-08-01 00:00:00');

MomentはそのままでもDB形式の時刻文字列がパースできますし、第2引数にフォーマット文字列を渡せばより柔軟な形式もパース可能です。

moment('2013-08-01 00:00:00');
moment('08-01-2013','MM-DD-YYYY');

長くなるので省略しますが、Dateから文字列への変換も大変なのですが、Momentを使えば一発です。

タイムゾーン変換が簡単

JavaScriptはクライアントサイドスクリプトとして動作するので、アクセス元のブラウザの時刻設定に依存して表示を変える必要があります。
このタイムゾーン変換がなかなか面倒で、次のようにサーバから返ってきた時刻を単にDateオブジェクト化すると、時差の分だけ時刻がずれてしまいます。

new Date('2013-08-01T00:00:00');

サーバがUTCで時刻を返してきたものを、クライアントのタイムゾーンに変換しようとすると、少々面倒な処理が必要です。

new Date(new Date('2013-08-01T00:00:00').getTime() - new Date().getTimezoneOffset() * 60 * 1000);

Moment.jsなら、「UTCで受ける」という関数があるので、これを使えば一発で確実です。

moment.utc('2013-08-01T00:00:00');

そういうわけで、Moment.jsを使えば、JavaScriptで時刻を扱うのが3倍くらい楽になります。使わない手はないです。

タイトルとURLをコピーしました