Laravel формат столбца времени в блейде - PullRequest
0 голосов
/ 07 января 2020

В Laravel Я знаю, что могу использовать Carbon для форматирования дат в более удобочитаемые строки. Есть ли способ сделать это для столбца time, например {{ $event->time->format('h i') }}? Все, что я вижу во всех моих поисках, относится к datetime столбцам. Многие приложения, которые я делаю, предназначены для расписаний, поэтому есть время «Начало» и «Конец». Для этих целей я использую $table->time('starts'); в своих миграциях, а не метку времени. Проблема в том, что когда я использую поле в Blade, мне нужно отформатировать его в 12-часовом формате AM / PM, и я никогда не смогу найти хороший способ.

Ответы [ 2 ]

0 голосов
/ 07 января 2020

В зависимости от вашей реализации у вас может быть ненадежное время, генерируемое при конверсии, в основном из-за часового пояса, поэтому я опубликую с предположением, что вы используете что-то вроде ниже: $table->timeTz('start'); или $table->time('start'); The Difference есть часовой пояс, который может давать неверное значение при конвертации, как упомянуто выше.

Итак, для вас нужно сгенерировать такой формат, как 12:00 AM / PM, который в действительности должен выглядеть как 12:00 PM или 12:00 PM или 12 : 30:00 .....

Мы можем сделать что-то вроде ниже:

public function dateTest(){

    $sampleTimeFromDb = "12:00:00"; //This is the basic sample time you're expected to get from your db ...
    $sampleTimeFromDbFormated = Carbon::createFromTimeString($sampleTimeFromDb)->format('g:i a'); // am/pm, you can change a to A to get AM/PM


//Other samples which basically will generate same sample but with time stamp specified
$sampleCurrentTimeLag = Carbon::createFromTimeString("12:00:00","Africa/Lagos");
$sampleCurrentTimeReg = Carbon::createFromTimeString("01:00:00","America/Regina");


$def_format_ = Carbon::createFromTimeString($sampleCurrentTimeLag)->format('g:i A'); //Without timezone AM/PM
$lagosFormat = Carbon::createFromTimeString($sampleCurrentTimeLag, "Africa/Lagos")->format('g:i a');; //with timezone am/pm

$def_format_0 = Carbon::createFromTimeString($sampleCurrentTimeReg)->format('g:i A'); //Without timezone AM/PM
$americaFormat = Carbon::createFromTimeString($sampleCurrentTimeReg, "America/Regina")->format('g:i a');; //with timezone am/pm


$data = [
    '_' => $sampleTimeFromDbFormated,
    'a' => $def_format_,
    'b' => $lagosFormat,
    'c' => $def_format_0,
    'd' => $americaFormat,
    'e' => $americaFormat
];

return View("playground", $data);

}

Мой взгляд playground.blade.php

<!DOCTYPE html>
<html>
<body>

<p>{{$_}}</p>
<p>{{$a}}</p>
<p>{{$b}}</p>
<p>{{$c}}</p>
<p>{{$d}}</p>
<p>{{$e}}</p>

</body>
</html>

Вывод: enter image description here

Надеюсь, это поможет.

0 голосов
/ 07 января 2020

попробуйте

в модели, убедитесь, что у вас есть поле в массиве приведения

protected $casts = [
    'created_at' => 'datetime:h i',
];


$event->time->format('h i')->toTimeString()   

, попробуйте ниже также

public function getformattedAttribute()
{
    return \Carbon\Carbon::createFromFormat('h i', $this->attributes['time']);
}

и запустите его с $ event -> отформатированный

...