使用 Carbon 和 Blade 计算两个日期之间的差异

有人知道如何通过一个给定的变量,而不是碳的默认参数?

Carbon 的文件显示:

// CARBON SAMPLE


$dtToronto = Carbon::createFromDate(2012, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2012, 1, 1, 'America/Vancouver');
echo $dtVancouver->diffInHours($dtToronto); // 3

我想在我的控制器里做这样的事情:

  // EXAMPLE


$date = "2016-09-16 11:00:00";
$datework = Carbon::createFromDate($date);
$now = Carbon::now();
$testdate = $datework->diffInDays($now);

用刀片模板检索

  // VIEW ON BLADE


<td> {{ $testdate }} </td>
164117 次浏览

You are not following the example from the Carbon Documentation. The method Carbon::createFromDate() expects 4 parameters: year, month, day and timezone. And you are trying to pass a formatted date string.

If you want to create a Carbon object from a formatted date string you can use the constructor of the class just like this:

$date = "2016-09-17 11:00:00";
$datework = new Carbon($date);

Or you can use the static Carbon::parse() method:

$date = "2016-09-17 11:00:00";
$datework = Carbon::parse($date);

For your purposes you can use the this full example:

$date = Carbon::parse('2016-09-17 11:00:00');
$now = Carbon::now();


$diff = $date->diffInDays($now);

And then in your Blade template:

<td> \{\{ $diff }} </td>

You code can be cleaned up and have the commented out code removed by doing:

<td>\{\{ $diff = Carbon\Carbon::parse($work['date'])->diffForHumans(Carbon\Carbon::now()) }} </td>

Blade Template

A shorter code

\{\{ $diff = Carbon\Carbon::parse($data->last_updated)->diffForHumans() }}

Result : 6 minutes ago

Shortest way

We can directly write it in blade

<span>\{\{ \Carbon\Carbon::parse( $start_date )->diffInDays( $end_date ) }}</span>

Carbon means you do not need to mix PHP Datetime and Carbon. Once you have the datetime as a Carbon, simply do this...

$comparisonTimeAsCarbon->diffAsCarbonInterval($theOtherTimeAsCarbon)

You can change diffAsCarbonInterval to diffAsSeconds, diffAsMinutes and many more.

diffForHumans is one of my faves.

Or, choose your own format with...

$comparisonTimeAsCarbon->diff($theOtherTimeAsCarbon)->format('%I:%S')

Carbon will even let you add text instead of a Carbon time, but, I recommend you use Carbon before you parse it, just in case.

You can use on a Blade template directly:

\{\{ (Carbon\Carbon::parse(Auth::user()->created_at))->diffInDays(Carbon\Carbon::now()) }}