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

如何将YYYMMDD格式日期数组转换为按月份分组的优雅分隔字符串?

PHP日期数组转优雅格式字符串

直接上实用方案,核心是先按月份分组日期,再分别处理每组后拼接:

步骤说明

  • 把每个YYYYMMDD格式的日期解析成DateTime对象,方便提取日和月份名称
  • 按「月份+年份」分组(避免跨年同月份混淆),把同一月的日期归为一组
  • 每组内的日期用逗号分隔,再加上月份名称
  • 多组(最多两组)用&连接,单组直接输出

完整代码

function formatDateArray(array $dates): string {
    // 解析日期并分组
    $groups = [];
    foreach ($dates as $dateStr) {
        $date = DateTime::createFromFormat('Ymd', $dateStr);
        if (!$date) continue; // 跳过无效日期
        
        $monthKey = $date->format('F'); // 用"February"作为分组键,不需要年份就用这个
        // $monthKey = $date->format('F Y'); // 需要显示年份用这个
        $day = $date->format('j'); // 提取不带前导零的日
        $groups[$monthKey][] = $day;
    }

    // 处理每组为字符串
    $parts = [];
    foreach ($groups as $month => $days) {
        $dayStr = implode(', ', $days);
        $parts[] = "$dayStr $month";
    }

    // 拼接结果:单组直接输出,两组用&连接
    return match(count($parts)) {
        0 => '',
        1 => $parts[0],
        default => implode(' & ', $parts)
    };
}

// 测试示例
echo formatDateArray(['20240228', '20240229', '20240301']);
// 输出:28, 29 February & 1 March

额外适配

如果需要显示年份,只需要把代码里的$monthKey = $date->format('F');改成$monthKey = $date->format('F Y');即可,输出会变成28, 29 February 2024 & 1 March 2024。

内容的提问来源于stack exchange,提问作者Chris Pink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:20:11