Concaténer des dates consécutives dans des chaînes de date
P粉946336138
P粉946336138 2024-02-04 08:58:08
0
1
458

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粉946336138
P粉946336138

répondre à tous(1)
P粉057869348

Oui, vous pouvez :

  • Divisez la chaîne en parties de chaîne de date
  • Triez cette liste. Étant donné que le format est AAAA-MM-JJ, l'ordre lexical par défaut convient.
  • Parcourez la liste et les entrées groupées dans des sous-tableaux lorsqu'elles représentent des dates consécutives. Utilisez 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
  • Enfin, convertissez ces sous-tableaux au format de chaîne dont vous avez besoin.
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);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!