Heim  >  Fragen und Antworten  >  Hauptteil

Verketten Sie aufeinanderfolgende Daten in Datumszeichenfolgen

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粉946336138P粉946336138232 Tage vor406

Antworte allen(1)Ich werde antworten

  • P粉057869348

    P粉0578693482024-02-05 00:58:06

    是的,您可以:

    • 将字符串分解为日期字符串部分
    • 对该列表进行排序。鉴于格式为 YYYY-MM-DD,默认的词法排序就可以了。
    • 当子数组中的列表和分组条目表示连续日期时,迭代它们。使用 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);

    Antwort
    0
  • StornierenAntwort