如何在 Laravel 5.5 中按真实日期对 JSON 响应进行正确排序

发布时间 - 2026-01-11 00:00:00    点击率:

laravel 的 `sortbydesc()` 默认按字符串排序,导致“03/12/2019”排在“23/12/2019”之后;需使用 `datetime::createfromformat()` 将非标准格式(d/m/y h:i:s)解析为可比较的 datetime 对象后再排序。

在 Laravel 5.5 中对 JSON 数据按日期字段(如 "CreationDate": "23/12/2019 16:49:36")进行正确降序排序时,直接调用 $collection->sortByDesc('CreationDate') 会失败——因为该字段是 dd/mm/yyyy HH:ii:ss 格式的字符串,而非 ISO 标准时间(如 Y-m-d H:i:s)。字符串排序会先比较日(03 vs 23),导致逻辑错误(例如 03/12/2019 被误判为晚于 23/12/2019)。

✅ 正确做法是:使用闭包回调,将每个 CreationDate 字符串通过 DateTime::createFromFormat() 解析为 DateTime 实例,再由 Collection 按其时间戳自然排序:

use Illuminate\Support\Collection;
use DateTime;

// 解析原始 JSON(注意:你的 JSON 是带双引号的字符串,需先去除外层引号或直接 json_decode)
$json = '[{"NumberCase":"CCS - 102957","CreationDate":"03/12/2019 16:59:19",...}]';
$data = json_decode($json);

$collection = new Collection($data);
$sorted = $collection->sortByDesc(function ($item) {
    return DateTime::createFromFormat('d/m/Y H:i:s', $item->CreationDate);
});

⚠️ 注意事项:

  • DateTime::createFromFormat() 返回 DateTime|false,若某条数据日期格式异常(如空值、错位),将返回 false 并可能引发排序异常。建议添加容错处理:
    $sorted = $collection->sortByDesc(function ($item) {
        $date = DateTime::createFromFormat('d/m/Y H:i:s', $item->CreationDate);
        return $date ?: new DateTime('1970-01-01'); // 默认兜底时间
    });
  • 排序后结果仍为 Collection,如需转回数组或 JSON,可链式调用 ->values()->toArray() 或 ->toJson();
  • 若后续需频繁操作日期,推荐在解码后统一转换为 Carbon 实例并存入新属性(如 ->put('created_at', Carbon::createFromFormat(...))),提升可维护性。

总结:字符串日期排序必须显式解析为时间对象。Laravel Collection 的高阶排序能力依赖于 PHP 原生时间类型比较,而非字符串字典序——这是处理本地化日期格式(如西班牙语地区常用的 d/m/Y)的关键实践。


# php  # laravel  # js  # json  # 本地化  # yy  # carbon  # 字符串  # Collection  # 闭包  # 对象  # 链式  # 而非  # 西班牙语  # 这是  # 如需  # 排在  # 转换为  # 中对  # 回调  # 再由 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何实现事件和监听器?(Event & Listener实战)  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Python正则表达式进阶教程_复杂匹配与分组替换解析  ,交易猫的商品怎么发布到网站上去?  JavaScript如何实现继承_有哪些常用方法  如何在阿里云域名上完成建站全流程?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel怎么在Controller之外的地方验证数据  香港服务器WordPress建站指南:SEO优化与高效部署策略  iOS验证手机号的正则表达式  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Java遍历集合的三种方式  浅谈Javascript中的Label语句  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何在IIS中新建站点并配置端口与IP地址?  网站建设保证美观性,需要考虑的几点问题!  Python高阶函数应用_函数作为参数说明【指导】  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  高端云建站费用究竟需要多少预算?  制作企业网站建设方案,怎样建设一个公司网站?  网站制作壁纸教程视频,电脑壁纸网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  高性能网站服务器部署指南:稳定运行与安全配置优化方案  iOS UIView常见属性方法小结  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何快速查询域名建站关键信息?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何续费美橙建站之星域名及服务?  如何在阿里云通过域名搭建网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在Windows环境下新建FTP站点并设置权限?  如何在云指建站中生成FTP站点?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  在线制作视频的网站有哪些,电脑如何制作视频短片?  昵图网官网入口 昵图网素材平台官方入口  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】