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

Posted

技术标签:

【中文标题】如何使用 Laravel 5 获得人类可读格式的时间差异?【英文标题】:How do I get the difference of time in human readable format with Laravel 5? 【发布时间】:2015-09-08 14:46:07 【问题描述】:

我想显示当前日期和时间与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 小时时,我想看看几天前。

【问题讨论】:

看看this(在google上找到) 你可以使用Carbon,它是 Laravel 自带的。 嗯...完全没有,我问的是一个特定的现有函数来获取差异。在 laravel5 中的时间。 This question is being discussed on meta. Calculate difference between two dates using Carbon and Blade 和/或 Carbon Difference in Time between two Dates in hh:mm:ss format 的可能重复项(取自第二次重新打开问题之前列出的重复项)。 【参考方案1】:

默认情况下,Eloquent 将 created_atupdated_at 列转换为 Carbon 的实例。因此,如果您使用 Eloquent 获取数据,则可以按如下方式进行。

$object->updated_at->diffForHumans();

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

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

【讨论】:

添加到这个答案中,您不需要将 'created_at' 和 'updated_at' 添加到 $dates 数组中,因为它们是自动添加的。要覆盖它并删除它们,请将 $timestamps 属性设置为 false【参考方案2】:

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

  \Carbon\Carbon::parse($on_revision->assignment->deadline)->diffForhumans() 

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

【讨论】:

【参考方案3】:
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;

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何使用 Laravel 5 获得人类可读格式的时间差异?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)

如何以人类可读的格式输出(到日志)多级数组?

如何使用人类可读的日期格式将BSON转换为JSON

htop 输出到人类可读文件

如何以 json 格式(双引号)漂亮地打印(人类可读的打印)Python dict? [复制]

使用 Carbon 返回人类可读的日期时间差