【问题标题】:Laravel: display difference between two dates in bladeLaravel:在刀片中显示两个日期之间的差异
【发布时间】:2018-10-19 02:08:33
【问题描述】:

我想知道是否可以在不使用 Carbon 的情况下在刀片视图中显示系统日期和具有日期格式 ($ticket->start_date) 的数据库记录之间的差异。

例如(我知道,它不起作用)

<td>{{ diff(date('Y-m-d'), strtotime($ticket->start_date))}}</td>

【问题讨论】:

    标签: php laravel date laravel-blade date-difference


    【解决方案1】:

    这里有两个不同的问题:

    首先:你如何区分两个日期。你可以在这里高科技或低科技。如果您不想使用 Carbon,我建议您使用低技术:

    <?php
    // Note, this gives you a timestamp, i.e. seconds since the Epoch.
    $ticketTime = strtotime($ticket->start_date);
    
    // This difference is in seconds.
    $difference = $ticketTime - time();
    

    此时,您必须决定如何输出差异。马上?几小时内?

    Difference: {{ $difference }} seconds
    
    Difference: {{ round($difference / 3600) }} hours
    
    Difference: {{ round($difference / 86400) }} days
    

    如果你想要像Carbon::diffForHumans() 这样漂亮的东西,你将不得不做额外的工程。

    第二:现在这成为你的一个问题,对于你的前端来说,这是否是太多的代码。显然,您可以将以上所有内容简化为 PHP 中的单行代码,但您的同事可能不会意识到它变得多么难以理解:

    {{ round((strtotime($ticket->start_date) - time()) / 3600) }} hours
    

    注意事项

    使用时间戳可以避免处理时区的问题。对于一堆用例,这就足够了;对于其他人来说,这是非常不足的。但是如果你想处理时区,你肯定最好使用 Carbon,它比使用 PHP 的 DateTime 更好,但取决于你。

    【讨论】:

    • 我选择你的推荐,简单易学,非常感谢
    【解决方案2】:

    功能

    date_diff()

    参数

    有两个参数。
    您需要将 DateTmime 对象传递给这些参数。

    退货

    此函数返回一个DateInterval 对象。
    您可以使用format() 函数格式化DateInterval 对象。

    示例

    <td>{{ date_diff(new \DateTime($ticket->start_date), new \DateTime())->format("%m Months, %d days"); }}</td>
    

    您可以在此 format() 字符串中输入任何内容。

    此示例格式返回类似"9 Months, 18 days"

    DateInterval 对象

    这是DateInterval 对象的示例。
    您可以通过如下发布的format() 函数访问这些属性。

      interval: + 9m 18d 02:27:21.488037
      +"y": 0
      +"m": 9
      +"d": 18
      +"h": 2
      +"i": 27
      +"s": 21
      +"f": 0.488037
      +"weekday": 0
      +"weekday_behavior": 0
      +"first_last_day_of": 0
      +"invert": 0
      +"days": 291
      +"special_type": 0
      +"special_amount": 0
      +"have_weekday_relative": 0
      +"have_special_relative": 0
    

    【讨论】:

    • 我很感激,它非常有帮助,但是由于未知原因,这改变了网络的风格
    • 非常抱歉,我写答案的时候出了点小错误。你看到date_diff() 函数被包裹在dd() 函数中了吗?那是错误。删除它。
    【解决方案3】:

    请使用作为 laravel 一部分的 Carbon lib。 https://carbon.nesbot.com/docs/#api-difference

    dd( \Carbon\Carbon::now()->diff( \Carbon\Carbon::parse('your db datetime') ) );
    

    例子:

    dd( \Carbon\Carbon::now()->diff( \Carbon\Carbon::parse('2019-12-12 00:00:00') ) );
    

    【讨论】:

    • 这显然是理想的方式,但 OP 说“没有碳”。
    猜你喜欢
    • 1970-01-01
    • 2020-10-19
    • 2023-03-26
    • 2020-09-18
    • 2017-12-27
    • 2011-10-29
    • 1970-01-01
    • 2013-10-02
    • 2012-01-15
    相关资源
    最近更新 更多