2015-04-05 6 views
6

Quando si esegue quanto segue in laravel Artisan Tinker:Carbon Carbon :: ora() genera InvalidArgumentException con il messaggio 'Trailing dati'

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

ottengo questo errore:

InvalidArgumentException with message 'Trailing data' 

Tuttavia, Carbon\Carbon::now() sulle proprie dichiarazioni restituisce un'istanza Carbon come previsto.

published_at deve essere modificato nell'istanza Carbon tramite protected $dates = ['published_at']; nel modello ed è anche incluso in protected $fillable.

Qualcuno sa cosa sta succedendo qui o come posso risolvere?


EDIT: La stessa cosa accade quando correva in una chiusura di percorsi, quindi non specifico ad armeggiare

EDIT 2: Sembra che gli altri stanno vivendo questo: https://laracasts.com/discuss/channels/general-discussion/carboncarbonnow-giving-error e due volte nei commenti per https://laracasts.com/series/laravel-5-fundamentals/episodes/8

EDIT 3: praticamente lo stesso codice del primo esempio utilizzato in https://laracasts.com/series/laravel-5-fundamentals/episodes/15 alle 15:10 senza errori.

MODIFICA 4: lo scambio della riga 2 del codice sopra a $article->published_at = Carbon::now()->format('Y-m-d'); funziona correttamente e include anche il tempo quando memorizzato nel database (sebbene non sia sicuro del perché).

Immagino che "i dati finali" possano riferirsi all'intero datetime essere troppo lungo, ma sembra strano che Laravel faccia così tanto con i datetimes automaticamente (auto-convertendosi in istanze Carbon, ad esempio) ma non questo.

Tuttavia, l'utilizzo in Modifica 3 sarebbe preferibile!

+0

Sembra un normale errore DateTime, tuttavia non dovrebbe accadere con il metodo 'now()'. C'è qualche possibilità che qualcosa non funzioni nelle impostazioni del fuso orario? Che aspetto ha la configurazione del fuso orario in 'config/app.php'? – kajetons

+0

Il fuso orario è predefinito: ''timezone' => 'UTC',' –

+0

Guardando attraverso il codice sorgente, sembra che non superi la riga 'return new DateTimeZone (date_default_timezone_get());' durante la costruzione della classe. Se questo non ti porta da nessuna parte dubito che ci sia qualcosa che puoi fare se non usando le funzioni di data nativa. – kajetons

risposta

-1

rimuovere Proprio questa funzione:

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

becuase che fissano il formato per il campo published_at già ...

2

Ho scoperto che non si dovrebbe dovrebbe usare createFromFormat, a meno che il secondo paramater $date è anche un oggetto di carbonio, ma se non è ed è solo una stringa si può semplicemente utilizzare

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

Penso che ci sia un po 'più ove per quanto riguarda dover calcolare in che formato è, ma questa è stata la mia soluzione temporanea.

'Y-m-d' è il modo in cui la parte anteriore lo ha analizzato nel modulo, ma sta entrando in un database che è quello che Carbon sputa. Ho ottenuto lo stesso errore:

[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 

Credo nella prima parte della traccia dello stack,

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

indica che il secondo parametro deve essere un oggetto di carbonio, in modo da avere per fare certo che è il caso sul modulo piuttosto che solo date('Y-m-d') come faresti in PHP.

1

Sto seguendo il tutorial su Laracast, ho riscontrato lo stesso errore. Finalmente ho capito cosa c'è di sbagliato in questa eccezione.

Nella funzione:

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

notato che il mio formato per $ data è 'Ymd'

Tuttavia, a mio create.blade.php e edit.blade.php, la forma ingresso è:

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

notato che il mio formato della data è 'GMA'.

Questo è il motivo per cui l'eccezione è lanciata da Laravel.

Dopo aver reso il formato della data uguale a 'Y-m-d' su tutti i file, l'eccezione scompare. Spero che aiuti.

0

Otterrete questo errore se il database restituisce un valore di data con un microtime decimali come questo:

2016-10-06 20:16:23.96034

Quelle cifre decimali extra sono il problema. Rimuovere quelli e dovrebbe funzionare.

Problemi correlati