PHP中修改JSON数组日期为Y-m-d格式的问题求助
问题分析与解决
你的问题核心是没有将格式化后的日期值写回原数组——你在循环中只是生成了格式化后的日期变量,但原数组$contacts的内容完全没被修改,所以json_encode输出的自然还是原始的DateTime格式数据。
修正方案1:使用引用循环修改原数组
直接在foreach中使用引用变量,这样修改循环变量就会同步修改原数组的对应元素:
$contacts = $result['contacts']; // 注意给索引加引号,这是PHP的规范写法 // 使用&$contact引用原数组元素 foreach ($contacts as &$contact) { $time = new DateTime($contact['createdAt']); $contact['createdAt'] = $time->format('Y-m-d'); // 将格式化后的值存回原字段 } unset($contact); // 解除引用,避免后续操作意外修改数组 $json = json_encode($contacts); print_r($json);
修正方案2:通过数组索引修改
如果不想使用引用,也可以通过循环时的键名直接定位修改原数组:
$contacts = $result['contacts']; foreach ($contacts as $key => $contact) { $time = new DateTime($contact['createdAt']); $contacts[$key]['createdAt'] = $time->format('Y-m-d'); // 用键名定位修改对应元素 } $json = json_encode($contacts); print_r($json);
这两种方法都会把createdAt字段替换成Y-m-d格式的字符串,之后执行json_encode就能得到你期望的结果了。
内容的提问来源于stack exchange,提问作者anono
相关产品推荐
相关产品推荐

