ライブラリ -> Moment.js
JavaScript は、日付関連の操作が弱いそうで
こちらのライブラリを入れておくと、便利だそうな。
【環境】
moment:2.9.0
moment:2.9.0
Moment.js
Moment.js Documentation
解析
バリデーション
moment().isValid();
- moment( 日付文字列, フォーマット ).isValid() // true or false
- moment( '2015-02', 'YYYY-MM' ).isValid() // true
- moment( '2015-22', 'YYYY-MM' ).isValid() // false
確かに上記はちゃんと動作するのだけど、ちょっとバグがあるかも?
Moment の isValid() が機能しない
表示
フォーマット
moment().format();
moment().format(String);
- moment().format( 'YYYY-MM' );
まぁ、いつも通りの感覚で利用すればよいかと。
タイムスタンプ
タイムスタンプのフォーマット文字列を初めて知ったので、覚書。
- // 秒単位(Unix Timestamp)
- moment().format( 'X' ); // 1360013296
- // ミリ秒単位(Unix Millisecond Timestamp)
- moment().format( 'x' ); // 1360013296123
計算
- // 明日の Moment オブジェクトを取得
- moment().add( 'days', 1 );
タイムスタンプ
Moment オブジェクトからタイムスタンプを得ると、文字列として返されているみたい。
上記1日後という計算をタイムスタンプでやろうとしたら、取得できなかった。
キャストしてやることで計算できた。
- var today = moment().format( 'x' );
- var tomorrow = today + 1000 * 60 * 60 * 24; // アウト
- var tomorrow = parseInt( today ) + 1000 * 60 * 60 * 24; // セーフ
初期化
参考サイトに書いてある初期化。
よく意味がわからない。
でも、実際に使っていて、初期化をしないと代入できないケースに遭遇。
- // これだと Invalid になる
- tsDatetimeNext = moment( tsDatetimeNext ).add( 'minutes', 1 ).format( 'x' );
- // こちらはちゃんと代入できる
- tsDatetimeNext = moment( tsDatetimeNext, 'x' ).add( 'minutes', 1 ).format( 'x' );
参考サイト
アシアルブログ:JavaScriptで日付を扱うならこれ!「moment.js」