2015-08-26 10 views
6

Ho una colonna variabile di data/ora in un database mysql. Cercando di convertire un timestamp in carbonio in qualcosa che posso inserire lì, ma Carbon::now() restituisce solo un oggetto Carbon e quando provo a usare la stringa timestamp dell'oggetto Carbon, non si registra in mysql.Conversione di una data di carbonio in data e ora del mysql.

public function store(CreateArticleRequest $request){ 
     $input = $request->all(); 
     var_dump($input); // JUST SO YOU CAN SEE 
     $input['published_at'] = Carbon::now(); 
     var_dump($input); // JUST SO YOU CAN SEE 
     Article::create($input); 
} 

Il mio primo discarica var è in questo modo:

array (size=4) 
    '_token' => string 'Wy67a4hWxrnfiGz61wmXfYCSjAdldv26wOJiLWNc' (length=40) 
    'title' => string 'ASDFasdf' (length=8) 
    'body' => string 'asdfasdf' (length=8) 
    'published_at' => string '2015-08-26' (length=10) 

mia seconda discarica var è in questo modo.

La colonna mysql relativa a "published_at" è una variabile di data e ora. Come suppongo di convertire questo da un oggetto di carbonio?

Grazie in anticipo.

+0

utilizzare 'strtotime' nella data. – mdamia

risposta

-4

È inoltre possibile impostare Mutator del modello.

public function setPublishedAt($value) 
{ 
    $this->attributes['published_at'] = strtotime($value); 
} 

per convertire al timestamp

$model -> setPublishedAt('2015-08-26'); // 1440572400 

oppure si può semplicemente convertire la data di timestamp usando strtotime

strtotime - parse di ogni inglese descrizioni testuali di datetime in un timestamp Unix

Spero che questo aiuto.

+0

non è un timestamp MySQL, questo è un timestamp UNIX – AndrewMcLagan

3

Il problema è nella stringa di data, ad esempio, si dispone di questo:

public function setCrbDateAttribute($value) 
{ 
    $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value); 
} 

Ora, se c'è una data come 2014/10/12 allora si verificherà questo errore perché l'ora ei minuti è mancante. Quindi assicurati che la data contenga tutta la pars e assicurati anche che la stringa della data contenga - come separatore non /.

In altre parole, controlla il valore $ prima di utilizzare Carbon e assicurati che la stringa di data contenga esattamente la stessa stringa formattata che hai usato nel metodo.

Questo avviene anche in un metodo di accesso, in modo da controllare il valore di data prima prima di utilizzarlo in Carbon::createFromFormat().

Se hai trovato la data dall'input dell'utente quindi validare la data prima di utilizzarlo con data o date_format: formato regola, controlla la convalida qui.

Risposta ref:

Laravel/Carbon Timestamp 0000-00-00 00:00:00 or Unexpected data found. Unexpected data found. Data missing

3

La risposta breve è che toDateTimeString() è quello che stai cercando:

$input['published_at'] = Carbon::now()->toDateTimeString(); 

Vedere http://carbon.nesbot.com/docs/ per altre opzioni, tra cui toDateString() se si desidera solo la parte relativa alla data e non il tempo.

Ma un modo ancora migliore per gestirlo sarebbe lasciare che Laravel gestisca il valore della data da/per un oggetto Carbon per te. Vedi https://laravel.com/docs/5.4/eloquent-mutators#date-mutators.