Geoff_S
Geoff_S

Reputation: 5107

laravel not showing date portion of timestamp

I'm trying to insert a value for a date into my datatables instance but I can't quite get the format right.

My controller is pulling in a mysql timestamp called 'created_at':

if( $d->created_at > $deadline){
    $d->call_status = 'new';
}

I'm dumping this and it returns the correct data, and currently in my datatables it dumps the correct data, however it's a full timestamp.

So this:

<td class="createdAt">
    @if(!is_null($this->created_at))
        {{ $this->created_at }}
    @endif
</td>

Works but returns 06/12/2018 00:00:00

I just want the date portion. However, when I try this:

<td class="createdAt">
    @if(!is_null($this->created_at))
        {{ $this->created_at->date->format('Y-m-d') }}
    @endif
</td>

It says it can't call format() on a string.

The format line works on my other columns but those are mysql DATE fields, not timestamps.

What would be best practice to get this to properly show the date portion only?

Upvotes: 0

Views: 1178

Answers (4)

Leon Vismer
Leon Vismer

Reputation: 5105

You can use attribute casting if it is inside Models.

protected $casts = [
    'created_at' => 'date:Y-m-d',
];

Alternatively depending on where you use it.

Carbon::parse($this->created_at)->format('Y-m-d');

Upvotes: 3

Paulo Henrique
Paulo Henrique

Reputation: 192

You can use mutators , try this: In your model create

public function getCreatedDateAttribute(){
return date('Y-m-d',strtotime($this->created_at));
}

Upvotes: 2

Aleksandar Djordjevic
Aleksandar Djordjevic

Reputation: 98

strtotime() Will convert your string to a timestamp format, so maybe try like this :

{{ date('Y-m-d', strtotime($this->created_at->date)) }}

Upvotes: 1

martincarlin87
martincarlin87

Reputation: 11042

Try

{{ $this->created_at->format('Y-m-d') }}

You shouldn't need it, but you can update your model if this is still a string:

protected $dates = ['created_at'];

Upvotes: 0

Related Questions