我有一個字串,其中的日期用逗號分隔,我想計算是否有任何單一日期相連。
所以清單可能是:
2022-07-15, 2022-07-16, 2022-07-17, 2022-07-18, 2022-07-22, 2022-07-25, 2022-07-26, 2022-07-27, 2022-07-28
我想要實現的是,我取得「連線」日期的間隔,然後「單獨」取得「單一」日期,如下所示:
0 => 2022-07-15 - 2022-07-18 1 => 2022-07-22 2 => 2022-07-25 - 2022-07-28
是否可以透過一些爆炸和以某種方式遍歷日期來從字串計算到輸出?
P粉0578693482024-02-05 00:58:06
是的,您可以:
strtotime($date . ' 1 day')
計算下一個日期,並驗證排序數組中的下一個日期是否與其相符。如果它與預期日期匹配,則將其作為當前子數組中的第二個條目。如果不匹配,則啟動一個新的子數組,...等等function groupDates($input) { $arr = explode(", ", $input); sort($arr); $expected = -1; foreach ($arr as $date) { if (strtotime($date) == $expected) { array_splice($range, 1, 1, $date); } else { unset($range); $range = [$date]; $ranges[] = &$range; } $expected = strtotime($date . ' + 1 day'); } foreach ($ranges as $entry) { $result[] = implode(" - ", $entry); } return $result; } // Demo run $str = "2022-07-15, 2022-07-16, 2022-07-17, 2022-07-18, 2022-07-22, 2022-07-25, 2022-07-26, 2022-07-27, 2022-07-28"; $result = groupDates($str); print_r($result);