2016-09-15 8 views
2

Кто-нибудь знает, как передать заданную переменную вместо параметров Carbon по умолчанию?Рассчитать разницу между двумя датами с использованием Carbon and Blade

Документация углерода говорит:

// 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> 
+0

В чем проблема, которую вы пытаетесь объяснить. Вы получаете какие-либо ошибки? Он показывает неправильные значения? Я думаю, что ваше решение будет использовать 'new Carbon ($ date)' вместо 'Carbon :: createFromDate ($ date)'. –

+0

Попробуйте с: 'Carbon :: parseDate ($ date);' insted of createFromDate' –

+0

Так что я пытаюсь вычислить его через Blade: ' {{Carbon \ Carbon :: now() -> diffInDays ($ work ['date'])}} ', но у меня есть эта ошибка:' Ошибка типа: аргумент 1, переданный в Carbon \ Carbon :: diffInDays() должен быть экземпляром Carbon \ Carbon, string given'. Поэтому у меня есть переменная $ work ['date'], которая является результатом запроса Model, а не объекта Carbon ... – Marko

ответ

5

Вы не следуете примеру из Carbon Documentation. Метод Carbon::createFromDate() ожидает 4 параметра:года, месяц , дня и часового пояса. И вы пытаетесь передать форматированную строку даты.

Если вы хотите создать объект углерода с отформатированной строкой даты вы можете использовать конструктор класса так же, как это:

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

Или вы можете использовать статический Carbon::parse() метод:

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

Для ваших целей вы можете использовать это полный пример:

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

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

И затем в вашем шаблоне Blade:

<td> {{ $diff }} </td> 
+0

После многих попыток это единственный способ, который работает: ' {{$ diff = $ datework- > diffForHumans ($ now)}} 'Все это прямое вычисление уровня представления, добавление кода комментариев html для удаления вывода Blade ... – Marko

+0

@MarcoFacc очень предпочтительно не выполнять эти вычисления в шаблоне представления. – iivannov

+0

В идеале я хочу рассчитать эти даты внутри своего собственного контроллера, но информация, которая мне нужна, извлекается на уровне представления через цикл foreach в массиве $ work. Я все еще пытаюсь сделать что-то более чистым и помещать его в контроллер, но пока я не нашел лучшего решения. – Marko