连接日期字符串中的连续日期
P粉946336138
P粉946336138 2024-02-04 08:58:08
0
1
524

我有一个字符串,其中的日期用逗号分隔,我想计算是否有任何单个日期相连。

所以列表可能是:

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);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板