简体   繁体   中英

Formatting dynamic dates in Laravel Blade

I am working on HTML emails in which there is a date section where I want to place a placeholder as it's a dynamic data.

The HTML code where I am using dates are:

<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>

Problem

I am wondering in place of Mar 28/18 @ 7:00pm to <br> Mar 30/18 @ 7:00pm , what placeholder do I need to format the date variables properly?

Depending on what type your dynamic date data have, you need to take different actions.

Formatting Carbon instances

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

Formatting vanilla timestamps

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

Formatting valid date strings

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

Formatting dates using custom Blade directives

Extend Blade for a new @datetime directive. Add a BladeServiceProvider and register the directive in its boot method.

You can also be lazy and add it to already existing 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'); ?>";
        });
    }
}

With that in place and considering Carbon instances, your view code would be:

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

Needless to say that you can easily adapt the code for other date types.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM