Moment.jsの非推奨の警告-認識されたISO形式ではありません


176

現時点で提供されている値が、認識されているISO形式ではないという警告が表示されます。今日、変数をモーメント関数で変更しましたが、それでも機能しません。

警告エラーは次のとおりです。

非推奨の警告:指定された値は、認識されているISO形式ではありません。モーメントの構築はjs Date()にフォールバックします。これは、すべてのブラウザーとバージョンで信頼できるわけではありません。ISO以外の日付形式は推奨されておらず、次のメジャーリリースで削除される予定です。詳細については、http://momentjs.com/guides/#/warnings/js-date/を参照してください。引数:[0] _isAMomentObject:true、_isUTC:true、_useUTC:true、_l:undefined、_i:2016-9-26 19:30、_f:undefined、_strict:undefined、_locale:[object Object]

var entryDate = new Date();
var currentDate = entryDate.getDate();

function between(x, min, max) {
  return x.valueOf() >= min.valueOf() && x < max.valueOf();
}

$('#custom1').change(function () {
  if ($('#custom1 :selected').val() == 'AU') {
    var keyword = '';

    var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');
    var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');
    var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');
    var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');
    var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
    var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
    var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
  } else if ($('#custom1 :selected').val() == 'NZ') {
    var aus1_s = moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
    var aus2_s = moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
    var aus3_s = moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
    var aus4_s = moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
    var aus5_s = moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
    var aus6_s = moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
    var aus6_e = moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
  } else {
    $('#entryEquals').val('');
    return false;
  }

  var today = moment();

  switch (true) {
    case between(today, aus1_s, aus2_s):
      keyword = 'RElYT04=';
      break;

    case between(today, aus2_s, aus3_s):
      keyword = 'QlJJREU=';
      break;

    case between(today, aus3_s, aus4_s):
      keyword = 'U1lETkVZ';
      break;

    case between(today, aus4_s, aus5_s):
      keyword = 'R1JPT00=';
      break;

    case between(today, aus5_s, aus6_s):
      keyword = 'V0VERElORw==';
      break;

    case between(today, aus6_s, aus6_e):
      keyword = 'VExD';
      break;

    default:
      $('#entryEquals').val('');
      break;
  }

  $('#entryEquals').val(keyword);
});

1
この警告は'2016-9-26 19:30'、認識されたISO形式ではないことを意味していると思います
Jaromanda X

フォーマットのエラーは何ですか?だから私は0を追加する必要がありますか?
Jemai 2016年

1
ドキュメントmoment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');に従って行うことができます ...これは、1桁または2桁の月と日、24時間形式の1桁または2桁の時間を
受け入れ

2
エラーは、供給されているフォーマットが認識ISO形式を提供し、または文字列を提供どちらか...認識ISO形式ではないことであることが予想形式の「ヒント」
Jaromanda X

これで、このフォーマットも追加できますか?var今日= moment.tz(todaystring、$。urlParam( 't_zone'));
2016年

回答:


180

すばらしいドキュメントをすべてチェックしてください!

ここで、警告メッセージについて説明します。

文字列+形式

警告:文字列の解析に対するブラウザのサポートに一貫性がありません。サポートするフォーマットについての仕様がないため、一部のブラウザーで機能するものは他のブラウザーでは機能しません。

ISO 8601文字列以外の解析で一貫した結果を得るには、String + Formatを使用する必要があります。

moment("12-25-1995", "MM-DD-YYYY");

文字列+形式(複数の形式)

複数のフォーマットがある場合は、それらの文字列+フォーマット(「s」付き)を確認してください。

入力文字列の正確な形式がわからないが、それが多くの1つである可能性があることがわかっている場合は、形式の配列を使用できます。

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

詳細については、ドキュメントをご覧ください。

タイムゾーン

ゾーンでのチェックアウト解析、タイムゾーンと同等のドキュメント。

moment.tzコンストラクターはモーメントコンストラクターとすべて同じ引数を取りますが、最後の引数をタイムゾーン識別子として使用します。

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");

編集

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
    var region = 'Australia/Sydney';

    aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);              
    aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);              
    aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);                  
    aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);                 
    aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
    aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
    aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
    var region = 'Pacific/Auckland';

    aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
    aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
    aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
    aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
    aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
    aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
    aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...

89
ドキュメントをコピーして貼り付けるのではなく、実際の答えを入力してください。
2016年

2
これは、「入力」にフォーマットを設定するのに役立つものです-moment( "12-25-1995"、["MM-DD-YYYY"、 "YYYY-MM-DD"]);
Demodave 2017年

2
@Rebs一般的な解決策は単純ではないため、多くのドキュメントを追加したと思います。明らかに、Jemaiの特定の解決策が答えに含まれているはずであり、私はそれを追加しました(ありがとう!)。
christo8989 2018

ありがとうございますが、この重いフォーマットフレームワークなしで単純な日付が必要な場合は、この警告を無視できますか?
Webwoman 2018

これは私を助けました-> moment( "12-25-1995"、["MM-DD-YYYY"、 "YYYY-MM-DD"]);
Cesar Rodriguez T

50

これを行うことは私にとってはうまくいきます:

moment(new Date("27/04/2016")).format

5
これは、コンソールの汚染を回避するための最も簡単な回避
Josey

2
IEのサポートにある程度対応しなければならない人には、このアプローチを勧めません。結果は、IE 11に非常にサクサク特別です
Ajm113

1
これが最も単純で正確な答えです。ありがとうございます。
Tahir Afridi

15

から日付を渡そうとしたため、このエラーが発生しましたlocalStorage。日付を新しいDateオブジェクトに渡し、次に.toISOString()を呼び出すと、私にとってはうまくいきました。

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

これにより、コンソールの警告が抑制されました。


これは警告を抑制しますが、タイムゾーンに固有である場合の欠点は、これはお勧めしません: '.toISOString()'と言っているように、指定された日付をUTCに変換するためです。現地での時間を続けるだろう... -他の回答から述べたように、「瞬間(新しい日付(」27/04/2016「))フォーマット」を試してみてください
whoamiは

15

このようなあなたの関数で瞬間を使用してください

 moment(new Date(date)).format('MM/DD/YYYY')

あなただけの「減価償却警告」を取り除くしたい場合、これはあなたが探している短い答えは
VictorC

6

この答えは、この警告をよりよく理解することです

非推奨の警告は、モーメントを使用して時間オブジェクトを作成すると発生しますvar today = moment();

この警告でよければ、もっと簡単な方法があります。

代わりにdateオブジェクトをjs使用しないでくださいmoment。たとえばmoment()、現在の日付を取得するために使用します。

または、js日付オブジェクトをmoment日付に変換します。js日付オブジェクトの形式を指定するだけです。

つまり、 moment("js date", "js date format");

例えば:

moment("2014 04 25", "YYYY MM DD");

(ただし、この方法は、廃止されるまで使用できますmomentが、今後廃止される可能性があります)


6
マジで!この非推奨警告を削除する方法に関する質問!この非推奨の使い方を尋ねないでください!また、「これは将来削除される」ではなく、「これは将来の時点から減価される可能性がある」ではなく、すでに非推奨です。
Al-Mothafar 2017

@ Al-Mothafar、私は少し疑問があります、なぜあなたはif状態が失敗したときにあなたはそれを超えましたか?続行しないで答えを終了する必要があります。
Saahithyan Vigneswaran 2017

2
ありがとう、これは私がここで知ることができることを本当に私に示した答えです。
DigitalDesignDj 2018

3

使用できます

moment(date,"currentFormat").format("requiredFormat");

これは、現在の形式が何であるかを瞬時に伝えるため、日付がISO形式でない場合に使用する必要があります。


1
このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
レオパル

@leopalが変更しました!
BeaST 30

2

moment.jsで文字列を解析します。

const date = '1231231231231' //Example String date
const parsed = moment(+date);

これは、Unix形式を使用して週番号を取得しようとしたときに、非推奨の警告を取り除くのに役立ちます。
curious.netter 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.