やりたいこと
一致しない日時の情報を切り分けた上でソートし直したいです。
具体例
例)このリストを、本日時点の日時を基準に、日付が近い順にソートし直したい。
var events_list = [ { id: 1, name: '元旦', date: "2021-01-01T00:00:00.000000000Z" }, { id: 2, name: '桜祭り', date: "2021-03-01T10:00:00.000000000Z" }, { id: 3, name: '夏祭り', date: "2021-08-12T10:00:00.000000000Z" }, { id: 4 name: 'クリスマス', date: "2021-12-24T00:00:00.000000000Z" } ];
希望)本日2021/2/10を基準とした場合、このように並び替えたい。 var events_list = [ { id: 2, name: '桜祭り', date: "2021-03-01T10:00:00.000000000Z" }, { id: 1, name: '元旦', date: "2021-01-01T00:00:00.000000000Z" }, { id: 3, name: '夏祭り', date: "2021-08-12T10:00:00.000000000Z" }, { id: 4 name: 'クリスマス', date: "2021-12-24T00:00:00.000000000Z" } ];
現在の日時情報は、元々moment.jsを使って取得していたので
2021-02-19T00:00:00+09:00(例)が手元にあります。
試したこと
そのため、今はこう書いています。
var sortTime_reset = events_list.sort(function(a, b){ sortTime_a = a.date; sortTime_b = b.date; //events_listのdateから数字以外を削除、桁数を12桁に揃える sortTime_str_a = sortTime_a .substr(0, 16) .replace( /-/g , "" ).replace( /:/g , "" ).replace( /T/g , "" ); sortTime_str_b = sortTime_b .substr(0, 16) .replace( /-/g , "" ).replace( /:/g , "" ).replace( /T/g , "" ); //現在時刻のフォーマット(2021-02-19T00:00:00+09:00)から数字以外を削除、桁数を12桁に揃える sortTimeNow_str = time_now.substr(0, 16) .replace( /-/g , "" ) .replace( /:/g , "" ).replace( /T/g , "" ).replace( /'+'/g , "" ); //現在時刻との差分を出す sortTime_result_a = sortTimeNow_str - sortTime_str_a; sortTime_result_b = sortTimeNow_str - sortTime_str_b; //比較 if (sortTime_result_a < sortTime_result_b ) { return -1; } else { return 1; } });
ただ、動かしてみてもソート前と変わらない並びのままです。
console.logで見る限り「現在時刻との差分を出す」までは動いているようなのですが、
それを元にevents_listを並び替えることができません…。
何かしらご教授いただければ幸いです。
どうぞよろしくお願いいたします。
![guest](/img/icon/icnUserSample.jpg)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/15 09:59