APIから取得した日付をMomentで解析し、データの収集が完了したら配列を並べ替える必要があります。私は現在これを持っています:
_myobject.name = name;
myobject.time = Moment(ajaxinfo.startdate).format('DD/MM/YYYY');
array.Push(myobject);
// ... more data is added ...
array.sort((left, right) => {
return Moment.utc(left.time).diff(Moment.utc(right.time));
});
_
_ajaxinfo.startdate
_はAPIから取得した文字列で、_"2018-01-28T13:00:00+00:00"
_のように見えます
しかし、上記のコードは機能しません。それは私に警告を与えます:
非推奨の警告:提供された値は、認識されているRFC2822またはISO形式ではありません。
moment
の構築はjsDate()
にフォールバックしますが、これはすべてのブラウザーとバージョンで信頼できるわけではありません。 RFC2822/ISO以外の日付形式は推奨されておらず、今後のメジャーリリースで削除される予定です。詳細については、 http://momentjs.com/guides/#/warnings/js-date/ を参照してください。
どうすればそれを機能させることができますか?
他の人が述べているように、「DD/MM/YYYY」の形式はISO8601形式ではなく、結果の文字列があいまいになる可能性があります。
文字列ではなく、Dateオブジェクトまたはmomentオブジェクトを実際に操作する必要があります。
したがって、配列オブジェクトに日付を格納するときにformat
を呼び出さないでください。日付をレンダリングする必要がある場合は、その時点でformat
を呼び出します。
const Moment = moment;
// Sample strings
var ajaxinfos = [
{ name: "x", startdate: "2018-01-28T13:00:00+00:00" },
{ name: "y", startdate: "2018-01-26T18:00:00+00:00" }
];
const array = [];
for (const ajaxinfo of ajaxinfos) {
const myobject = {};
myobject.name = ajaxinfo.name;
myobject.time = Moment(ajaxinfo.startdate); // don't call format
array.Push(myobject);
}
// No more need to convert strings to dates while sorting:
array.sort((left, right) => left.time.diff(right.time));
console.log(array);
// Whenever you need to format:
const formatted = array.map(info => info.time.format("MM/DD/YYYY"));
console.log(formatted);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>