Laravel Carbon Daten fehlen

8

In meinem Modell habe ich folgendes:

%Vor%

Ich verwende einen datetime-Picker, um das Start- und Enddatum in folgendem Format einzufügen:

%Vor%

Ohne die Sekunden. Wenn ich es so mache, bekomme ich diesen Fehler:

%Vor%

Wenn ich die Sekunden einschließe, funktioniert es. Die Sekunden sind für mich nicht wichtig, und ich möchte sie nicht in meine Datumsauswahlfelder aufnehmen. Irgendwie herum, damit ich diese Felder noch als Datumsfelder verwenden kann?

    
Hardist 23.01.2016, 19:50
quelle

4 Antworten

26

tl; dr

Ihre Datumszeichenfolge und Ihr Datumsformat sind unterschiedlich. Sie müssen die Formatzeichenfolge ändern oder die Datumszeichenfolge so ändern, dass sie übereinstimmen.

Erklärung

Das Problem

Dieser Fehler tritt auf, wenn die createFromFormat -Funktion von Carbon eine Datumszeichenfolge empfängt, die nicht mit der übergebenen Formatzeichenfolge übereinstimmt. Genauer gesagt kommt dies von der Funktion DateTime::createFromFormat , weil Carbon nur Folgendes aufruft:

%Vor%

Nicht genügend Daten

Wenn Ihre Datumszeichenfolge "kürzer" ist als die Formatzeichenfolge wie in diesem Fall:

%Vor%

Carbon wird werfen:

  

InvalidArgumentException in Carbon.php Zeile 425:
  Daten fehlen

Zu viele Daten

Wenn Ihre Datumszeichenfolge "länger" ist als die Formatzeichenfolge wie in diesem Fall:

%Vor%

Carbon wird werfen:

  

InvalidArgumentException in Carbon.php Zeile 425:
  Nachgestellte Daten

Unter der Haube

Laut der Dokumentation zu Mutatoren lautet das Standard-Datumsformat: 'Y-m-d H:i:s' . Die Verarbeitung des Datums findet in der Funktion asDateTime des Modells . In der letzten Bedingung ist die Funktion getDateFormat genannt, das ist, wo das benutzerdefinierte Format herkommt. Das Standardformat ist definiert in der Grammar -Klasse der Datenbank .

Lösung

Sie müssen sicherstellen, dass die Datumszeichenfolge der Formatzeichenfolge entspricht.

Ändern Sie die Formatzeichenfolge

Sie können die Standardformatzeichenfolge wie folgt überschreiben:

%Vor%

Es gibt zwei Probleme mit diesem Ansatz:

  • Dies gilt für jedes Feld, das im $dates -Array des Modells definiert ist.
  • Sie müssen die Daten in diesem Format in der Datenbank speichern.

Bearbeiten und formatieren Sie die Datumszeichenfolgen

Meine empfohlene Lösung ist, dass das Datumsformat der Standard 'Y-m-d H:i:s' bleiben sollte und Sie die fehlenden Teile des Datums wie folgt vervollständigen sollten:

%Vor%

Und wenn Sie das Datum verwenden möchten, sollten Sie es formatieren:

%Vor%

Natürlich sollten die Felder zu Daten mutiert werden:

%Vor%     
totymedli 03.01.2017, 01:28
quelle
4

Sie können das $ dateFormat in Ihrem Modell wie Christian sagt, aber wenn Sie die Felder updated_at und created_at nicht in die Operation einbeziehen möchten, können Sie Ereignisse verwenden, um das datetime-Objekt zu "korrigieren", bevor es in der Datenbank gespeichert wird .

Hier haben Sie das offizielle Dokument: Ссылка

    
subzeta 23.01.2016 20:32
quelle
3

Sie müssen protected $dateFormat auf 'Y-m-d H:i 'in Ihrem Modell festlegen, siehe Ссылка

    
mazedlx 23.01.2016 20:28
quelle
1

Modelle

Diese Funktion deaktiviert die Carbon-Emulationen in Datetimes Ссылка

%Vor%     
Cristhian Carreño 09.11.2016 19:24
quelle

Tags und Links