You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP日期列表优化:合并连续日期并调整输出格式

解决方案

要实现你需要的日期格式输出,我们需要调整list_date函数的两个核心逻辑:将连续日期数字合并为「起始-结束」格式,以及把日期部分的空格替换为「 / 」分隔符。以下是调整后的完整代码:

function list_date($dates) {
    if (empty($dates)) {
        return '';
    }

    $days = [];
    $month = '';
    $year = '';

    // 拆分每个日期的日、月、年
    foreach ($dates as $date) {
        $parts = explode(' ', $date);
        if (count($parts) === 3) {
            $days[] = (int)$parts[0];
            $month = $parts[1];
            $year = $parts[2];
        }
    }

    if (empty($days)) {
        return '';
    }

    // 排序日期,确保连续数字能被正确识别
    sort($days);

    $ranges = [];
    $currentStart = $days[0];
    $currentEnd = $days[0];

    // 遍历生成连续日期范围
    for ($i = 1; $i < count($days); $i++) {
        if ($days[$i] === $currentEnd + 1) {
            $currentEnd = $days[$i];
        } else {
            $ranges[] = $currentStart === $currentEnd ? (string)$currentStart : "$currentStart - $currentEnd";
            $currentStart = $days[$i];
            $currentEnd = $days[$i];
        }
    }

    // 添加最后一个日期范围
    $ranges[] = $currentStart === $currentEnd ? (string)$currentStart : "$currentStart - $currentEnd";

    // 拼接最终格式字符串
    $dayString = implode(', ', $ranges);
    return "Event Schedule $dayString / $month / $year";
}

// 测试示例
$testDates = ['1 03 2023', '2 03 2023', '3 03 2023', '7 03 2023', '9 03 2023'];
echo list_date($testDates);

关键修改说明:

  • 连续日期压缩:通过遍历排序后的日期数组,识别连续数字段,将连续的日期日数合并为「X - Y」格式
  • 分隔符替换:最终拼接时,将月和年部分的空格替换为「 / 」分隔符
  • 排序处理:先对日期日数排序,避免输入乱序导致连续日期无法被正确识别

运行上述代码后,会输出你期望的格式:Event Schedule 1 - 3, 7, 9 / 03 / 2023。

内容的提问来源于stack exchange,提问作者Toni Rhubanaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:45:01