連接日期字串中的連續日期
P粉946336138
P粉946336138 2024-02-04 08:58:08
0
1
472

我有一個字串,其中的日期用逗號分隔,我想計算是否有任何單一日期相連。

所以清單可能是:

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

全部回覆(1)
P粉057869348

是的,您可以:

  • 將字串分解為日期字串部分
  • 對該清單進行排序。鑑於格式為 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);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!