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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:04:07