Alexander Kleinhans
Alexander Kleinhans

Reputation: 6248

Laravel5 Carbon date string not correctly parsing

I've been struggling with this issue for over four hours now. Laravel's Carbon date thing isn't playing nice with Bootstrap or something.

I've been trying to set a mutator for an Articles Model

public function setPublishedAtAttribute($date){    
    $this->attributes['published_at'] = Carbon::createFromFormat($date); 
}

In Articles Model, I've included use Carbon\Carbon;. At this point, I have a Bootstrap date picker:

 <div class="form-group">
{!! Form::label('published_at', 'Publish On:') !!}
{!! Form::input('date', 'published_at', date('Y-m-d'),[ 'class' => 'form-control']) !!}
 </div>

My error log throws this:

[2015-08-16 22:32:36] production.ERROR: exception 'InvalidArgumentException' with message 'Trailing data' in /Users/alexanderkleinhans/Misc/laravel_test/laravel/vendor/nesbot/carbon/src/Carbon/Carbon     .php:414

And a huge stack trace:

#0 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Article.php(17): Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))
#1 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(10577): App\Article->setPublishedAtAttribute(Object(Carbon\Carbon))
#2 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9615): Illuminate\Database\Eloquent\Model->setAttribute('published_at', Object(Carbon\Carbon))
#3 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9553): Illuminate\Database\Eloquent\Model->fill(Array)
#4 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9665): Illuminate\Database\Eloquent\Model->__construct(Array)
#5 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Http/Controllers/ArticlesController.php(36): Illuminate\Database\Eloquent\Model::create(Array)
#6 [internal function]: App\Http\Controllers\ArticlesController->store()
#7 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8490): call_user_func_array(Array, Array)
#8 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8559): Illuminate\Routing\Controller->callAction('store', Array)
#9 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8539): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\ArticlesController), Object(Illuminate\Routing\Route), 'store')
#10 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#11 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#14 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8540): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#15 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8525): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\ArticlesController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'store')
#16 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7500): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'App\\Http\\Contro...', 'store')
#17 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7471): Illuminate\Routing\Route->runWithCustomDispatcher(Object(Illuminate\Http\Request))
#18 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7124): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#19 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#20 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#21 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#23 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7125): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#24 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7113): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#25 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7098): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#26 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2088): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#27 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#28 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#29 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2708): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#32 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12456): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#35 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(11104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#38 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12193): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#41 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12132): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#44 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2758): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#47 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#49 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2035): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#50 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2018): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#51 /Users/alexanderkleinhans/Misc/laravel_test/laravel/public/index.php(60): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#52 /Users/alexanderkleinhans/Misc/laravel_test/laravel/server.php(21): require_once('/Users/alexande...')
#53 {main}  

The funny thing is is that:

public function setPublishedAtAttribute($date){
    $this->attributes['published_at'] = Carbon::parse($date);
}

Will work, but is completly useless. It will record the date correctly, but it's a current date. I don't recall using Carbon::now(), so the date must be coming from Boostrap? Even when I set Bootstraps date picker to something else, nothing registers.

I've combed through this thing and wasted enough time on it. Thanks in advance.

EDIT. I have in face discovered that Carbon and Laravel are not the issue and in fact, parse($date), despite probably being a little more overhead than createFromFormat is working. For kicks, I tried

public function setPublishedAtAttribute($date){    
    $this->attributes['published_at'] = Carbon::parse($date); 
    $this->attributes['body'] = $date; 
}

Just so I could see what it was. Bootstrap is in fact the issue.

Upvotes: 1

Views: 952

Answers (1)

jedrzej.kurylo
jedrzej.kurylo

Reputation: 40899

The reason you're getting this error is that you're setting the published_at incorrectly. Carbon::createFromFormat() requires the second argument to be a string, yet you're passing a Carbon object.

That's what you can see in the stack trace:

#0 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Article.php(17): Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))

Upvotes: 2

Related Questions