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?
$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.
Carbon::now returns the current date and time and Carbon:today returns the current date.
An API extension for DateTime that supports 281 different languages.
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.
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!
Why not try using the following:
$dateTimeString = $aDateString." ".$aTimeString; $dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With