2 回答

TA貢獻2036條經驗 獲得超8個贊
你需要做的是計算出每個日期離今天有多遠,并用它來對項目進行排序,可能有一種更優雅的方式,但這(我認為)有效。基本上用于abs()確保所有差異都是 +ve 并從今天開始每個日期......
usort($arr, function($a, $b) {
return (abs(strtotime('today') - strtotime($a->date))
- (abs(strtotime('today') - strtotime($b->date))));
});

TA貢獻1850條經驗 獲得超11個贊
奈杰爾的回答幫了大忙,但產生的結果參差不齊,有時日期會到處都是,我不知道為什么。所以,我想出了一個解決方法,也許它會對互聯網上的人有所幫助。
我已經向一個對象添加了一個鍵/值 - interval,我以下列方式計算的這個鍵的值。
$interval_raw = date("Ymd") - get_field('date_nachalo') + 1;
if($interval_raw < 0) {
$interval_raw += 10000;
}
所以,如果我得到一個負數,即任何未來的日期,我會提前 30 年加上 10000,我想這有點矯枉過正,因為沒有正常的人類將事件安排在那么遠的未來。此外,添加+ 1以便下一個即將到來的日期將是第一個。如果我刪除它,那么第一個日期將是過去的日期。基本上,如果今天是 3 月 10 日,最后一個事件是 3 月 1 日,下一個事件事件是 3 月 11 日,那么沒有第+ 1一個事件日期將是 3 月 1 日而不是 3 月 11 日。
如果有人知道更優雅的方法,請讓全世界知道。
- 2 回答
- 0 關注
- 90 瀏覽
添加回答
舉報