Laravel: 显示blade中两个日期的差异
Laravel: display difference between two dates in blade
我想知道是否可以在 blade 视图中显示系统日期和数据库记录之间的日期格式($ticket->start_date)使用碳。
例如(我知道,它不起作用)
<td>{{ diff(date('Y-m-d'), strtotime($ticket->start_date))}}</td>
函数
date_diff()
参数
有两个参数。
您需要将 DateTmime
对象传递给这些参数。
Returns
这个函数return一个DateInterval
对象。
您可以使用 format()
函数格式化 DateInterval
对象。
例子
<td>{{ date_diff(new \DateTime($ticket->start_date), new \DateTime())->format("%m Months, %d days"); }}</td>
您可以在此 format()
字符串中键入任何内容。
此示例格式 return类似于 "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
这里有两个不同的问题:
首先:你如何区分两个日期。您可以在这里选择高科技或低科技。如果您不想使用 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 更好,但这取决于你。
请使用 laravel 中的 Carbon 库。
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') ) );
我想知道是否可以在 blade 视图中显示系统日期和数据库记录之间的日期格式($ticket->start_date)使用碳。
例如(我知道,它不起作用)
<td>{{ diff(date('Y-m-d'), strtotime($ticket->start_date))}}</td>
函数
date_diff()
参数
有两个参数。
您需要将 DateTmime
对象传递给这些参数。
Returns
这个函数return一个DateInterval
对象。
您可以使用 format()
函数格式化 DateInterval
对象。
例子
<td>{{ date_diff(new \DateTime($ticket->start_date), new \DateTime())->format("%m Months, %d days"); }}</td>
您可以在此 format()
字符串中键入任何内容。
此示例格式 return类似于 "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
这里有两个不同的问题:
首先:你如何区分两个日期。您可以在这里选择高科技或低科技。如果您不想使用 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 更好,但这取决于你。
请使用 laravel 中的 Carbon 库。 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') ) );