Laravel:显示刀片中两个日期之间的差异

时间:2018-10-19 02:08:33

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

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

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

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

3 个答案:

答案 0 :(得分:2)

功能

date_diff()

参数

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

返回

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

示例

<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

答案 1 :(得分:2)

您在这里有两个独立的问题:

首先:如何区分两个日期。您可以在这里选择高科技或低端技术。如果您不想使用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 :(得分:1)

请使用laravel的Carbonlib。 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') ) );