moment(value)
任意の値を渡すと、#1407に従って非推奨の警告が生成されます。
この解析を使用する方法があれば、Dateコンストラクターにフォールバックせずに本当にいいでしょう。 私がこれまでに見つけた唯一の方法はかなり不器用です:
if (moment.isDate(value)) {
return moment(value);
} else {
return moment(value, moment.ISO_8601);
}
それでも、これはASP.net /Date(1198908717056)/
文字列を解析しません。
最も簡単なオプションは、厳密なオプションを2つの引数形式で許可することです: moment(value, true)
。
ありがとう。
明確にするために、厳密モードを使用せずに、警告を表示するのではなく、フォールバックを無効にする方法を求めていますよね?
はい、 moment()
サポートするすべてのものを自動的に解析したいのですが、すべて失敗した場合は、警告を出力してDate
コンストラクターを使用する代わりに、無効な日付を生成したいと思います。
moment
将来のバージョンの動作にプリエンプティブにオプトインしたいのですが、非推奨のDate
コンストラクターフォールバックは完全に削除されます。
厳密モードの意味が正確にはわかりません。 moment(value, 'YYYY-MM-DD')
ような正確な形式を渡すときはどういう意味ですか? もしそうなら、これは役に立ちません。1。非常に冗長であり、2。 moment(value)
がDate
コンストラクターに頼る前に解析できるすべての形式がまだ含まれていないためです。
厳密モードを有効にするには、最後のパラメーターとしてtrue
を渡します。 それはドキュメントにあります。 基本的に、これは文字列が_exactly_の形式と一致する必要があることを意味します。
moment(String)
直接サポートされている形式はドキュメントに記載されているので、これをstrictモードと同じように考えるのは許容できると思います。 つまり、 moment(String, Boolean)
追加します。
はい、それは素晴らしいことです。 ありがとう。
@SystemParadoxはい、必要なものはサポートされています。 moment.createFromInputFallback(config)
オーバーライドするだけです:
moment.createFromInputFallback = function (config) {
config._d = new Date(NaN);
}
私はそれが些細なことではないことに同意しますが、それは可能です;-)
これは便利ですが、設定をグローバルに変更します。
一度に1つの呼び出しでコードベースを段階的に移行したい場合はどうすればよいですか?
moment(String, true)
サポートを追加できないのはなぜですか?
回避策はありますが、これをパブリックAPIに含めると、さまざまなユースケースに役立ちます。 組み込みフォーマットのみに関する検証を求める#2535も検討してください。
必要なのはmoment.JS_DATE定数です。つまり、入力をnew Date
に渡すだけです。https://github.com/moment/moment/issues/1686を確認して
@SystemParadoxが役立つ場合は、私はあなたと同様の問題を抱えていて、次のようなラッパー関数を作成することになりました。
function disableNativeDateFallback(config) {
config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
return function() {
var prevFallback = moment.createFromInputFallback;
moment.createFromInputFallback = disableNativeDateFallback;
var result = momentFn.apply(null, arguments);
moment.createFromInputFallback = prevFallback;
return result;
}
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);
他のコードへの影響を避けるために、 createFromInputFallback
簡単に置き換えてから、戻る前に復元することで機能します。 移行する準備ができているコードは、 moment
とmoment.utc
代わりにmomentStrict
とmomentStrict.utc
使用でき、残りはそのまま使用できます。
最も参考になるコメント
@SystemParadoxが役立つ場合は、私はあなたと同様の問題を抱えていて、次のようなラッパー関数を作成することになりました。
他のコードへの影響を避けるために、
createFromInputFallback
簡単に置き換えてから、戻る前に復元することで機能します。 移行する準備ができているコードは、moment
とmoment.utc
代わりにmomentStrict
とmomentStrict.utc
使用でき、残りはそのまま使用できます。