Carbon的DiffForHumans方法参数

在laravel里每个模型的created_atupdated_atdeleted_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_NOWCarbonInterface::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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

这种Carbon 时间还没有用到过

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!