如何使用Laravel 5获得人类可读格式的时间差


How do I get the difference of time in human readable format with Laravel 5?

我想显示当前日期和时间与存储在updated_at列中的日期和时间之间的差异。然而,我希望它像一样对人类友好

53 mins ago
2 hours ago
3 days ago

有没有一个功能可以让我更容易?

为了确保您理解我,假设我的数据库中有一列(updated_at),它等于2015-06-22 20:00:03,当前时间为20:00:28。然后我想看看:

25 mins ago

当它超过59分钟时,我只想显示几个小时,当它超过24小时时,我想看看多少天前。

默认情况下,Eloquent会将created_atupdated_at列转换为Carbon实例。因此,如果您使用Eloquent获取数据,那么您可以按以下方式进行操作。
$object->updated_at->diffForHumans();

如果您想自定义将自动变异的字段,那么在您的模型中,您可以根据需要自定义它们。

// Carbon instance fields
protected $dates = ['created_at', 'updated_at', 'deleted_at'];

如果日期是字符串格式,请使用laravel Carbon;例如

 {{ 'Carbon'Carbon::parse($on_revision->assignment->deadline)->diffForhumans() }}

注意我是如何将字符串包装在carbon::parse()

中的
function timeDiff($firstTime, $lastTime): string
{
    $firstTime = strtotime($firstTime);
    $lastTime = strtotime($lastTime);
    $difference = $lastTime - $firstTime;
    $data['years'] = abs(floor($difference / 31536000));
    $data['days'] = abs(floor(($difference - ($data['years'] * 31536000)) / 86400));
    $data['hours'] = abs(floor(($difference - ($data['years'] * 31536000) - ($data['days'] * 86400)) / 3600));
    $data['minutes'] = abs(floor(($difference - ($data['years'] * 31536000) - ($data['days'] * 86400) - ($data['hours'] * 3600)) / 60));
    $timeString = '';
    if ($data['years'] > 0) {
        $timeString .= $data['years'] . " Years, ";
    }
    if ($data['days'] > 0) {
        $timeString .= $data['days'] . " Days, ";
    }
    if ($data['hours'] > 0) {
        $timeString .= $data['hours'] . " Hours, ";
    }
    if ($data['minutes'] > 0) {
        $timeString .= $data['minutes'] . " Minutes";
    }
    return $timeString;
}