Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert String to Carbon

I am using Laravel 5.1

Few days ago I used protected $dates = ['license_expire'] in my model to convert the string date to Carbon instances. In HTML the default value in create form for the date was Carbon\Carbon::now()->format('Y-m-d')

In order to show alert in home page i used <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>

Till then diffForHumans() method works fine.

But in that case the edit form's default value also was today's date no matter what was in database(I am using a partial form). To resolve it I change the default value in HTML was NUll. And add another method in my model to show current date in create form.

public function getLicenseExpireAttribute($date) {     return Carbon::parse($date)->format('Y-m-d'); } 

After that when i go to home page i have an FatalErrorException which says Call to a member function diffForHumans() on string

When I check the date with dd($employee->license_expire) it become STRING again.

Can anybody tell me how can I convert the string to Carbon in this situation?

or

Make my create form's default date as today's date, the edit form's date from database and I can use diffForHumans() to show alert in home page?

like image 644
smartrahat Avatar asked Sep 13 '15 11:09

smartrahat


People also ask

How do you convert a string to a Carbon date?

$date = Carbon\Carbon::parse($rawDate); well thats it. You'll now have a Carbon instance & you can format the date as you like using Carbon helper functions.

What is Carbon :: now ()?

Carbon::now returns the current date and time and Carbon:today returns the current date.

What is Nesbot Carbon?

An API extension for DateTime that supports 281 different languages.

What is Carbon parsing?

As for the parse method, you can use it to create a Carbon instance from a string. This is an alias for the constructor that allows better fluent syntax as it allows you to do. Copy Code Carbon::parse('Monday next week'); 20. Level 36.


2 Answers

You were almost there.

Remove protected $dates = ['license_expire']

and then change your LicenseExpire accessor to:

public function getLicenseExpireAttribute($date) {     return Carbon::parse($date); } 

This way it will return a Carbon instance no matter what. So for your form you would just have $employee->license_expire->format('Y-m-d') (or whatever format is required) and diffForHumans() should work on your home page as well.

Hope this helps!

like image 54
Rwd Avatar answered Sep 21 '22 17:09

Rwd


Why not try using the following:

$dateTimeString = $aDateString." ".$aTimeString; $dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');    
like image 43
mgilberties Avatar answered Sep 22 '22 17:09

mgilberties