次のコードを使用して、Moment.jsを使用してサーバー側の日時を現地時間に変換しています
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
しかし、私は得ています:
非推奨の警告:モーメント構築はjs Dateにフォールバックします。これは推奨されておらず、今後のメジャーリリースで削除されます。詳細については、 https://github.com/moment/moment/issues/1407 を参照してください。
私はそれを取り除くことができないようです!どうすれば修正できますか?
警告を取り除くには、次のいずれかが必要です。
日付文字列のISO形式のバージョンを渡します。
moment('2014-04-23T09:54:51');
今持っている文字列を渡しますが、文字列がどのフォーマットにあるかをMomentに伝えます:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
文字列をJavaScriptのDateオブジェクトに変換してから、Momentに渡します。
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
最後のオプションは、Momentが現在サポートしている組み込みのフォールバックで、非推奨のコンソール警告があります。彼らは、将来のリリースでこのフォールバックをサポートしないと言います。彼らは、new Date('my date')
を使用することはあまりにも予測不可能であると説明しています。
別の方法として、moment.suppressDeprecationWarnings = true;
を設定することにより、非推奨の警告を表示しないようにすることができます
moment
の日付構成は、javascriptのnew Date()
を内部的に使用します。 new Date()
構文は、 RFC2822 または )の日付文字列を認識しますISO すべてのブラウザでフォーマットします。これらの形式ではない日付を使用してmoment
オブジェクトを構築すると、非推奨の警告がスローされます。
非推奨の警告がスローされますが、一部の形式では、moment
オブジェクトはChromeで正常に構築されますが、FirefoxまたはSafariでは正常に構築されません。このため、Chromeで日付を処理すると、(常にではなく)期待どおりの結果が得られ、他ではInvalid Date
がスローされます。
考えてください、02.02.2018
、
Chrome-moment("02.02.2018")._d
-> Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
Firefox-moment("02.02.2018")._d
-> Invalid Date
Safari-moment("02.02.2018")._d
-> Invalid Date
したがって、moment.js
は、推奨/標準形式が使用されない場合にご自身の責任で使用されます。
非推奨の警告を抑制するには、
moment
の構築に日付形式を指定します。例:moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
例:moment("2018-02-01T18:30:00.000Z")
-ISO形式
moment("Thu, 01 Feb 2018 18:30:00 GMT")
-RFC2822形式- Githubの形式
moment.suppressDeprecationWarnings = true;
入力フォールバックをすぐに上書きすることをお勧めします。
moment.createFromInputFallback=function (config){
config._d = new Date(config._i);
}
(3)はすべての警告を抑制するため、(4)は日付構築フォールバックのみを抑制します。 (4)を使用すると、内部のnew Date()
が使用され、他の非推奨がコンソールに表示されるため、Invalid Date
が得られるので、アプリケーションでモーメントをアップグレードしたり、非推奨のメソッドを置き換えたりできます。
日付がAPIからstring
(私の問題のように)として渡された場合、フィルターを使用して文字列を一時的に日付に変換できます。これは、瞬間的な建設警告を処理します。
$scope.apiDate = 10/29/2017 18:28:03";
angular.module('myApp').filter('stringToDate', function() {
return function(value) {
return Date.parse(value);
};
});
ビューに追加します。
{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}}
上記の回答に示されているとおり。日付形式の提供は機能するはずです。
次のコード行で非推奨メッセージを受け取るのはなぜですか。文字列+形式が問題を改善すると考えられていました。 moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
。また、提供されている日付形式を制御できないのでご注意ください。私は自分でそれを'YYYY-MM-DDTHH:mm:ss'
に変換できることを知っているので、モーメントは非推奨メッセージを表示しません。ただし、ドキュメントによると、コード行は機能するはずです。ここに私が見ている廃止メッセージがあります。
「非推奨の警告:指定された値は認識されたRFC2822またはISO形式ではありません。瞬間構築はjs Date()にフォールバックします。これはすべてのブラウザおよびバージョンで信頼できません。RFC2822/ ISO以外の日付形式は推奨されず、今後のメジャーリリース。詳細については、 http://momentjs.com/guides/#/warnings/js-date/ を参照してください。