Maison > Questions et réponses > le corps du texte
J'ai une chaîne avec des dates séparées par des virgules et je souhaite calculer si des dates uniques sont connectées.
La liste pourrait donc être :
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
Ce que je veux réaliser, c'est que j'obtienne l'intervalle des dates « concaténées », puis que j'obtienne « individuellement » la date « unique » comme ceci :
0 => 2022-07-15 - 2022-07-18 1 => 2022-07-22 2 => 2022-07-25 - 2022-07-28
Est-il possible de calculer à partir d'une chaîne vers la sortie avec quelques explosions et une boucle sur les dates d'une manière ou d'une autre ?
P粉0578693482024-02-05 00:58:06
Oui, vous pouvez :
strtotime($date . ' + 1 day')
pour calculer la date suivante et vérifiez que la date suivante dans le tableau trié lui correspond. Si elle correspond à la date attendue, faites-en la deuxième entrée du sous-tableau actuel. S'il n'y a pas de correspondance, démarrez un nouveau sous-tableau,... et ainsi de suite 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);