旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

Moment.jsで不自然に感じる挙動

2014年4月17日

Moment.js を使っていて不自然に感じる挙動のメモ。
バージョンは 2.4.0 です。

moment(何か値) の挙動

これは自然:

moment();  // ローカル時間の有効な Moment オブジェクトを返す

これもJSだから当然:

moment(undefined);  // 上記と同じ有効なオブジェクトを返す

これもいいですね:

moment('不正な文字列').isValid() === false;  // 不正なオブジェクトを返す

えっ?:

moment(null) === null;  // これは真
moment('') === null;  // これも真

こうやって雑に調べたいときに不便:

moment(不明な値 || null).isValid();  // null だからNG
moment(不明な値 || '').isValid();  // null だからNG
moment(不明な値 || '不正な文字列').isValid();  // こういう風にしないといけない

add, subtract は破壊的に更新する

このように破壊的に更新されてしまう:

var m = moment('2014-04-01');
m.add('days', 1);
m.toDate();  // 加算されている

破壊したくなかったら clone するしかない?:

var m = moment('2014-04-01');
m.clone().add('days', 1);

他の方法あんのかな・・・。

追記:2014-06-19

ファッ!?:

moment('2014-06-14 00:00:00', 'YYYY-MM-DD').isValid();  // -> true

お、おう・・・:

moment('2014-06-14 00:00:00', 'YYYY-MM-DD', true).isValid();  // -> false