Moment.jsで不自然に感じる挙動
2014年4月17日
Moment.js を使っていて不自然に感じる挙動のメモ。
バージョンは 2.4.0 です。
バージョンは 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