Форматирование динамических дат в Laravel Blade

Я работаю над электронными письмами HTML, в которых есть раздел даты, где я хочу разместить заполнитель, поскольку это динамические данные.

HTML-код, в котором я использую даты:

<tr>
   <td style="padding-bottom: 3%;text-align:right;">when:</td>
   <td style="padding-bottom: 3%;padding-left: 8%;">Mar 28/18 @ 7:00pm to <br> Mar 30/18 @ 7:00pm</td>
</tr>

Проблема

Мне интересно вместо Mar 28/18 @ 7:00pm to <br> Mar 30/18 @ 7:00pm, какой заполнитель мне нужен для правильного форматирования переменных даты?


person flash    schedule 27.06.2018    source источник


Ответы (1)


В зависимости от того, какой тип у ваших динамических данных даты, вам нужно предпринять разные действия.

Форматирование экземпляров Carbon

{{ $start->format('M d/y @ h:ma') }} to <br> {{ $end->format('M d/y @ h:ma') }}

Форматирование ванильных временных меток

{{ date('M d/y @ h:ma', $start) }} to <br> {{ date('M d/y @ h:ma', $end) }}

Форматирование допустимых строк даты

{{ date('M d/y @ h:ma', strtotime($start)) }} to <br> {{ date('M d/y @ h:ma', strtotime($end)) }}

Форматирование дат с использованием пользовательских директив Blade

Расширить Blade для новой директивы @datetime. Добавьте BladeServiceProvider и зарегистрируйте директиву в ее методе boot.

Также можно полениться и добавить его в уже существующий AppServiceProvider.

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class BladeServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Blade::directive('datetime', function ($expression) {
            return "<?php echo ($expression)->format('M d/y @ h:ma'); ?>";
        });
    }
}

С учетом этого и с учетом экземпляров Carbon ваш код представления будет таким:

@datetime($start) to @datetime($end)

Излишне говорить, что вы можете легко адаптировать код для других типов дат.

person sepehr    schedule 27.06.2018
comment
ваш ответ кажется хорошим, но мне интересно, можем ли мы использовать просто {{$date_from}} в {{$date_to}} ? - person flash; 27.06.2018
comment
Что вы можете. Отформатируйте даты уже в коде вашего контроллера, а затем передайте их в представление. {{ }} используется только для вывода экранированных переменных, не более того. AFAIK, это не расширяется так, как вы имеете в виду. - person sepehr; 27.06.2018
comment
Поскольку мы используем php для динамической передачи данных. - person flash; 27.06.2018