2015-04-05 13 views
6

Bei der Ausführung der folgenden in Laravel Artisan Tinker:Carbon- Carbon :: now() wirft InvalidArgumentException mit Meldung 'Daten Nachgestellte'

$article = new App\Article; 
$article->published_at = Carbon\Carbon::now(); 

ich diesen Fehler:

InvalidArgumentException with message 'Trailing data' 

jedoch Carbon\Carbon::now() auf seine eigene gibt eine Carbon Instanz wie erwartet zurück.

published_at sollte im Modell in protected $dates = ['published_at']; zu Carbon Instanz mutiert werden und es ist auch in protected $fillable enthalten.

Wer weiß, was hier vor sich geht oder wie ich es lösen kann?


EDIT: Das gleiche passiert, wenn in einem Verschluss in Strecken lief, also nicht spezifisch

EDIT: Tinker 2: Sieht aus wie andere erleben dies: https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error und zweimal in den Kommentaren für https://laracasts.com/series/laravel-5-fundamentals/episodes/8

EDIT 3: Ziemlich genau der gleiche Code wie das erste Beispiel wird in https://laracasts.com/series/laravel-5-fundamentals/episodes/15 um 15:10 ohne Fehler verwendet.

EDIT 4: Swap-Zeile 2 des obigen Codes zu $article->published_at = Carbon::now()->format('Y-m-d'); funktioniert gut und enthält sogar Zeit, wenn in der Datenbank gespeichert (obwohl nicht sicher, warum).

Ich würde vermuten, dass "trailing data" sich auf die volle datetime beziehen könnte, die zu lang ist, aber seltsam scheint, dass Laravel so viel mit Datumsterminen automatisch macht (automatische Konvertierung zu Carbon-Instanzen zum Beispiel), aber nicht das.

Verwendung in Edit 3 wäre jedoch vorzuziehen!

+0

Sieht aus wie ein regulärer DateTime-Fehler, sollte jedoch nicht mit 'now()' Methode geschehen. Gibt es eine Chance, dass etwas mit deinen Zeitzoneneinstellungen nicht stimmt? Wie sieht die Zeitzonen-Konfiguration in 'config/app.php' aus? – kajetons

+0

Zeitzone ist Standard: ''Zeitzone' => 'UTC',' –

+0

Beim Durchsehen des Quellcodes sieht es so aus, als käme es nicht über diese Linie hinaus. 'New newtimeTimeZone (date_default_timezone_get());' während der Klassenkonstruktion. Wenn Sie das nirgends hinführt, bezweifle ich, dass Sie nichts anderes tun können, als die nativen Datumsfunktionen zu verwenden. – kajetons

Antwort

-1

Entfernen Sie einfach diese Funktion:

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

becuase, dass das Format für published_at Feld beheben bereits ...

2

ich gefunden habe, dass Sie sollten nicht createFromFormat verwenden sollten, es sei denn, der zweite Parameter um $date ist auch ein Carbon-Objekt, aber wenn es nicht und es ist nur eine Zeichenfolge können Sie einfach

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

verwenden ich denke, es ist ein wenig mehr ove Rhead in Bezug auf es herauszufinden, in welchem ​​Format es ist, aber das war meine temporäre Workaround.

'Y-m-d' ist die Art, wie die Front es in das Formular geparst hat, aber es geht in eine Datenbank, die Carbon ausspuckt. Ich habe den gleichen Fehler:

[2015-08-16 21:35:57] production.ERROR: exception 'InvalidArgumentException' with message 'Trailing data' in /Users/alexanderkleinhans/laravel/vendor/nesbot/carbon/src/Carbon/Carbon  .php:414 

ich im ersten Teil des Stack-Trace glaube,

Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))

zeigt an, dass der zweite Parameter ein Carbon-Objekt sein muss, damit Sie machen müssen, können Sicher, das ist der Fall auf dem Formular statt nur date('Y-m-d') wie in PHP.

1

Ich folge Laracast Tutorial, ich stieß auf den gleichen Fehler. Ich habe endlich herausgefunden, was mit dieser Ausnahme nicht stimmt.

In der Funktion:

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

Bemerkt, dass mein Format für $ date 'Ymd' ist die Form

Doch meiner create.blade.php und edit.blade.php, Eingang:

{!! Form::input('data-date', 'published_at', date('d-m-Y'), ['class' => 'form-control']) !!} 

bemerkt, dass mein Datumsformat ist 'dmY'.

Dies ist der Grund, warum die Ausnahme von Laravel geworfen wird.

Nachdem ich das Datumsformat gleich 'Y-m-d' über alle Dateien gemacht habe, verschwindet die Ausnahme. Ich hoffe das hilft.

0

Sie diese Fehlermeldung erhalten, wenn die Datenbank einen Datumswert mit einer Dezimalstelle micro wie diese Rückkehr:

2016-10-06 20:16:23.96034

Diese zusätzlichen Dezimalstellen das Problem sind. Entferne diese und es sollte funktionieren.