如何在 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调试工具使用【前端必备】

