Today I spent many hours trying to find a workaround of that problem. Luckly I found your post. More people should see this. But I still can't convert it to 24h format. Do you know how to do that?
Laravel date parsing from datetime-local and freeform date request data
A very handy feature of Laravel is the ability of make use of automatic date mutators. This means, say I have a published_at attribute in my model I can add this to a $dates array and Laravel will automatically parse this to a Carbon instance and vice-versa when retrieving and persisting to the database.
On one of my forms, rather than make use of a datepicker library I thought I'd try the datetime-local input type (which currently has limited support but is in the HTML spec). This uses a format like 2012-12-14T19:00. This causes a problem with Laravel's date mutator as it assumes a format, usually based on the database in use (although you can override this it seems) and uses this the parse the date before saving.
What it comes down to is that I need to add my own mutator to my model to handle irregular date formats:
public function setPublishedAtAttribute($date)
{
if (is_string($date))
$this->attributes['published_at'] = Carbon::parse($date);
}
This can handle unexpected date formats so should also work if the datetime-local input isn't supported and falls back to a text input into which a use types the datetime in their own format. It seems this is fired before going through to the eloquent date parser which therefore receives a Carbon instance and just passes it on.
Shouldn't Eloquent be able to handle this natively? I imagine Carbon::parse() is slower than Carbon::createFromFormat() but it should be negligible.
Please or to participate in this conversation.