PHP中如何将JSON中的日期时间格式化为易读格式
解决PHP日期格式化问题:转成带序数后缀的易读格式
嘿,我来帮你搞定这个日期格式化的需求!首先先修正下你原代码里的小问题——for(reset($i); $i < $count; ++$i)这行的初始化不对,应该把$i从0开始,不然遍历会出问题。
接下来核心是把ISO格式的日期字符串(比如2017-08-02T14:15:00)转成你想要的2nd August 2017 14.15这种格式。PHP的DateTime类是处理这类需求的绝佳工具,不过它没有直接生成序数后缀(st/nd/rd/th)的方法,所以我们需要加一点小逻辑来实现。
修改后的完整代码
$count = count($characters->instances); // 修正循环:从0开始遍历数组元素 for ($i = 0; $i < $count; ++$i) { // 获取原始的ISO格式日期字符串 $rawStartDate = $characters->instances[$i]->start; // 将字符串转为DateTime对象,方便后续格式化 $date = new DateTime($rawStartDate); // 生成日期的序数后缀(st/nd/rd/th) $day = $date->format('j'); // 获取不带前导零的日期数字 if ($day >= 11 && $day <= 13) { // 11、12、13特殊处理,都用th后缀 $suffix = 'th'; } else { switch ($day % 10) { case 1: $suffix = 'st'; break; case 2: $suffix = 'nd'; break; case 3: $suffix = 'rd'; break; default: $suffix = 'th'; break; } } // 拼接成目标格式:日期+后缀+月份+年份+时间(小时.分钟) $formattedDate = $day . $suffix . ' ' . $date->format('F Y H.i'); // 输出格式化后的日期 echo $formattedDate . PHP_EOL; }
代码说明
- DateTime对象转换:
new DateTime($rawStartDate)自动解析ISO格式的字符串,避免手动拆分日期的麻烦。 - 序数后缀逻辑:处理了11-13的特殊情况(它们的后缀都是th),其他数字根据最后一位来匹配对应的后缀。
- 格式参数说明:
F:输出完整的月份名称(比如August、September)Y:输出4位年份(比如2017、2018)H.i:输出24小时制的小时和分钟,用点分隔(比如14.15、17.00)
这样运行代码后,就能得到你想要的2nd August 2017 14.15这种易读的日期格式啦!
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

