Heim > Fragen und Antworten > Hauptteil
Ich habe eine Zeichenfolge mit durch Kommas getrennten Datumsangaben und möchte berechnen, ob einzelne Datumsangaben miteinander verbunden sind.
Die Liste könnte also lauten:
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
Was ich erreichen möchte, ist, dass ich das Intervall der „verketteten“ Daten erhalte und dann „einzeln“ das „einzelne“ Datum wie folgt erhalte:
0 => 2022-07-15 - 2022-07-18 1 => 2022-07-22 2 => 2022-07-25 - 2022-07-28
Ist es möglich, mit einigen Explosionen und einer Schleife über die Daten irgendwie von einer Zeichenfolge zur Ausgabe zu rechnen?
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);