如何将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
相关产品推荐
相关产品推荐

