
本文详解如何将包含日期字符串(mm/dd/yyyy 格式)的数组按年份自动分组,生成以年份为键、对应对象数组为值的关联结构,并提供 php 与 javascript 的完整实现及注意事项。
本文详解如何将包含日期字符串(mm/dd/yyyy 格式)的数组按年份自动分组,生成以年份为键、对应对象数组为值的关联结构,并提供 php 与 javascript 的完整实现及注意事项。
在实际开发中,常需对时间序列数据(如日志、文章、订单)按年份归类展示。原始数据通常为扁平数组,每个元素含 date 字段(格式为 "07/16/2022"),目标是将其重组为以年份为键的嵌套结构——例如 "2022" 对应所有该年份的对象集合,且结果需保持原始数据完整性。
✅ JavaScript 实现(推荐用于前端或 Node.js)
利用 substring(6) 快速提取日期字符串末尾4位作为年份(适用于标准 MM/DD/YYYY 格式),再通过对象累加实现分组:
const input = [
{ "id": "47", "date": "07/16/2022", "text": "ph" },
{ "id": "46", "date": "06/16/2022", "text": "ph" },
{ "id": "45", "date": "06/16/2021", "text": "ph" }
];
const output = {};
input.forEach(obj => {
const year = obj.date.substring(6); // 安全提取 '2022'
if (!output[year]) output[year] = [];
output[year].push(obj);
});
console.log(output);
// 输出:
// {
// "2021": [{ "id": "45", "date": "06/16/2021", "text": "ph" }],
// "2022": [
// { "id": "47", "date": "07/16/2022", "text": "ph" },
// { "id": "46", "date": "06/16/2022", "text": "ph" }
// ]
// }
⚠️ 注意:若日期格式不统一(如含 YYYY-MM-DD 或缺失年份),建议改用 new Date(obj.date).getFullYear() 做健壮解析,但需确保日期字符串可被 Date 正确解析。
✅ PHP 实现(适用于后端数据预处理)
PHP 中使用 substr($date, 6) 同样高效,配合 array_key_exists() 判断键是否存在,并用 $output[$year][] = $item 追加元素:
<?php $input = [
['id' => '47', 'date' => '07/16/2022', 'text' => 'ph'],
['id' => '46', 'date' => '06/16/2022', 'text' => 'ph'],
['id' => '45', 'date' => '06/16/2021', 'text' => 'ph']
];
$output = [];
foreach ($input as $item) {
$year = substr($item['date'], 6); // 提取 '2021' 或 '2022'
if (!array_key_exists($year, $output)) {
$output[$year] = [];
}
$output[$year][] = $item;
}
print_r($output);
?>
输出为标准 PHP 关联数组,可直接 json_encode($output) 返回给前端,或用于模板渲染。
? 关键要点总结
- 格式依赖性:当前方案假设 date 字段严格为 MM/DD/YYYY(长度10,年份恒定位于索引6–9)。若格式多变,请优先使用日期解析函数(如 PHP 的 date('Y', strtotime($date)) 或 JS 的 new Date().getFullYear())。
- 排序补充:本方案不改变原始顺序;如需按年份升序输出,PHP 可 ksort($output),JS 可 Object.fromEntries(Object.entries(output).sort(([a],[b]) => a - b))。
- 空值防护:生产环境建议增加 isset($item['date']) && !empty($item['date']) 校验,避免 substr() 报错。
- 性能提示:对于万级数据,两种方案均为 O(n) 时间复杂度,无需额外优化。
掌握这一分组模式,可快速支撑归档页、统计图表、时间轴等典型业务场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











