我已经通读了the documentation of DiffForHumans,这是非常简单的,但有没有一种方法来自定义日期打印出来:

  • 13年零1个月零10天
  • 01年11个月01天

它将在哪里尊重年/年、月/月、日/日?

  • 方法1:

    $date = Carbon::parse('2010-08-29');
    $formattedDate = $date->diffForHumans(['parts' => 3, 'join' => ', '];
    

    将打印出13 years, 1 month, 4 weeks ago

  • 方法2:

    $date = Carbon::parse('2010-08-29');
    $formattedDate = $date->diff(now())->format('%y Year, %m Months and %d Days')
    

    将打印出13 Year, 1 Months and 28 Days

  • 方法3(备份选项):

    $date = Carbon::parse('2010-08-29');
    $formattedDate = $date->diff(now())->format('%y Year(s), %m Month(s) and %d Day(s)')
    

    将打印出13 Year(s), 1 Month(s) and 28 Day(s)

有没有一个普通的PHP类可以实现类似的功能?


修改后的已接受解决方案:

public function customDiffForHumans(Carbon $date) : string
    {
        $diff = $date->diff(now());

        $years  = $diff->y ? $diff->y . ' Year' . ($diff->y > 1 ? 's' : '') : '0 Years';
        $months = $diff->m ? $diff->m . ' Month' . ($diff->m > 1 ? 's' : '') : '0 Months';
        $days   = $diff->d ? $diff->d . ' Day' . ($diff->d > 1 ? 's' : '') : '0 Days';

        return implode(', ', array_filter([$years, $months, $days]));
    }

推荐答案

这是用于处理相同问题的自定义函数:

function customDiffForHumans(DateTime $date) {
    $now = new DateTime();
    $diff = $date->diff($now);

    $years = $diff->y ? $diff->y . ' Year' . ($diff->y > 1 ? 's' : '') : null;
    $months = $diff->m ? $diff->m . ' Month' . ($diff->m > 1 ? 's' : '') : null;
    $days = $diff->d ? $diff->d . ' Day' . ($diff->d > 1 ? 's' : '') : null;

    return implode(', ', array_filter([$years, $months, $days]));
}

$date = new DateTime('2010-08-29');
return customDiffForHumans($date);

Php相关问答推荐

PHP在将数组子集赋给变量时是否复制数组子集?

CodeIgniter AJAX表格提交中的CSRF token 再生问题

如何在Woocommerce中禁用机器人添加到推车?

使用PHP阅读XML提要

与会者在WooCommerce中按购物车项目数量自定义 checkout 字段

如何将WooCommerce产品属性术语名称显示为链接术语?

我必须对所有的SQL查询使用预准备语句吗?

将一个按钮添加到WooCommerce产品的管理视图中,该按钮链接到一个自定义的WebHook,并在末尾附加产品ID

创建一个Woocommerce我的帐户订单页面,仅显示已完成的订单

Laravel处理belongToMany和额外字段

奇怪的 preg_match_all() 行为

如何在 PHP laravel 中将图像的透明背景转换为白色?

WooCommerce 按产品运输插件:仅收取较高的运输费用

Firefox 115 会话行为:为什么页面无法找到要加载的现有会话 ID?

使用其ID查询和捕获与订单相关的其他详细信息的shopware 6方法

在wordpress注销后防止后退操作

PHP preg_replace括号和方括号内的所有逗号

PHP 将数组值插入到 csv 列

Laravel 模型将日期保存为空

用于多态服务的 Symfony setter 注入