Carbon的DiffForHumans方法参数
在laravel里每个模型的created_at
、updated_at
、deleted_at
字段默认被转换成Carbon
对象,因此你可以使用$user->created_at->diffForHumans()
来直接显示一下格式
xx秒前
xx周前
...
//或者不需要显示是时间“前”还是“后”
xx分钟
xx年
...
简单示例
diffForHumans()
:是转化为人性化可读的日期,而不是显示为YYYY-MM-DD
格式
//1.现在时间 与 过去时间比较
$user = User::factory()->create([
'created_at' => now()->subMinutes(5)->subSeconds(10)
]);
echo $user->created_at->diffForHumans();
// 结果: "5分钟前"
//2.现在时间 与 未来时间比较
$user = User::factory()->create([
'created_at' => now()->addMinutes(5)
]);
//假如下面代码在1秒钟后运行,现在还剩4:59 这里查看下面的第四参数
$user->created_at->diffForHumans();
//结果:“4分钟后”
如果是只想知道差异时间,不需要知道时间是前
或者后
,那我们使用方法的第二个参数删除这两个字:前
、后
$user->created_at->diffForHumans(now(), CarbonInterface::DIFF_ABSOLUTE);
// 结果: "4分钟"
第一个参数需要提供时间,不传第一个参数默认为now()
。
第二个参数的默认值是 CarbonInterface::DIFF_RELATIVE_AUTO
(无修饰符)CarbonInterface::DIFF_RELATIVE_TO_NOW
、CarbonInterface::DIFF_RELATIVE_TO_OTHER
第三个参数为短语法,中文中没有,可忽略此项
//法语
$user->created_at->locale('fr')->diffForHumans();
//// 结果: "il y a 5 heures"
locale()
语言,在laravel
中默认使用配置项参数,在config/app.php
中修改locale
配置项即可
第四个参数为要显示多少部分
想上面示例提到的,4分59秒
的差异, Carbon
返回4分钟
或者5分钟
,没有秒,怎么显示呢?
第四参数就是指定显示的部分:最多有七个
部分来日期显示年
、几个月
、周
、天
、小时
、分钟
、秒
值为1-7
,参数值跟上面的顺序没关系,只指显示的部分数量
$dt = Carbon::parse('2021-08-25');
$result = $dt->diffForHumans('2023-04-24', CarbonInterface::DIFF_ABSOLUTE, true, 4);
//结果:“1年7个月4周2天”
这时候就有个问题,我不想显示周
这个单位,只需要年
、几个月
、天
。这时候顺便说说下另外一种传参方式,数组传参。
$dt = Carbon::parse('2021-08-25 11:05:56');
$result = $dt->diffForHumans([
'other' => '2023-04-24 17:17:21', //时间
'parts' => 6, //一共七个部分 去掉周就6个部分,传6就足够
'skip' => 'w',//跳过周
//'short' => true,//短语法,中文中没有 可忽略此项
'syntax' => CarbonInterface::DIFF_ABSOLUTE,
//'minimumUnit' => 'd' //显示的最小单位 取消注销,将只显示到天
]);
//结果:"1年, 7个月, 30天, 6小时, 11分钟, 25秒"
只想单独显示天:skip
的顺序是:(y, m, w, d, h, min, s, ms, µs).
$dt = Date::parse('2021-08-25 11:05:56');
$result = $dt->diffForHumans([
'other' => '2023-04-24 17:17:21', //时间
'parts' => 1, //一共七个部分 去掉周就6个部分,传6就足够
'skip' => ['y', 'm', 'w'],//跳过年、月、周
//'short' => true,//短语法,中文中没有 可忽略此项
'syntax' => CarbonInterface::DIFF_ABSOLUTE,
//'minimumUnit' => 'd' //显示的最小单位 取消注销,将只显示到天
]);
结果:"607天"
翻译原文:做了自己修改以及修改了原文章里的错误,不是原原本本的翻译
本作品采用《CC 协议》,转载必须注明作者和本文链接
这种Carbon 时间还没有用到过