Eines meiner Felder in einer meiner Entitäten ist eine "datetime" -Variable.
Wie kann ich dieses Feld in eine Zeichenfolge konvertieren, um es in einem Browser zu rendern?
Hier ist ein Code-Snippet:
{% for game in games %}
...
<td> {{game.gameTeamIdOne.teamName}} </td>
<td> {{game.gameTeamIdTwo.teamName}} </td>
<td> {{game.gameDate}}</td>
</tr>
{% endfor %}
Hier ist die Variable in meiner Entitätsklasse:
/**
* @var date $gameDate
*
* @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
*/
private $gameDate;
Und hier ist die Fehlermeldung, die ich bekomme:
Beim Rendern einer Vorlage wurde eine Ausnahme ausgelöst ("Catchable Fatal Error: Objekt der Klasse DateTime konnte nicht in Zeichenfolge in ... \ app \ cache \ dev \ twig \ 9b \ ad \ 58fd3bb1517632badf1fdc7fa4a8.php Zeile 33 konvertiert werden." ) in "BeerBundle: Games: gameTable.html.twig" in Zeile 10.
{{ game.gameDate|date('Y-m-d H:i:s') }}
für Datum und Uhrzeit. Ich hatte minutenlang Probleme, Charakter zu finden.date
Funktion weitergeleitet wird. Basierend auf Ihrem Beispiel müssen Sie es{% if game.gameDate is not empty %} ... {%endif}
DateTime
Klasse nicht erweitern ! Verwenden Sielocalizeddate
stattdessen einfach den Filter für Twig .{% if game.gameDate %} {{ game.gameDate|date('Y-m-d H:i:s') }} {% endif %}
würde vorgeschlagen werdenSie können
date
Filter verwenden:quelle
__toString()
Methode wissen müsste, in welches Format dasDateTime
Objekt konvertiert werden soll, und es gibt wahrscheinlich Hunderte von möglichen Formaten. Natürlich können Sie in PHP dieformat()
Methode für einDateTime
Objekt verwenden, das ein Formatargument verwendet, und derdate
Filter ist einfach das Twig-Äquivalent dieser Methode.Dies hängt vom Format ab, in dem das Datum angezeigt werden soll.
Statisches Datumsformat
Wenn Sie ein statisches Format anzeigen möchten, das für alle Ländereinstellungen gleich ist (z. B. ISO 8601 für einen Atom-Feed), sollten Sie den Twig-
date
Filter verwenden :Was immer eine Datums- / Uhrzeitangabe im folgenden Format zurückgibt:
Die vom
date
Filter akzeptierten Formatzeichenfolgen sind die gleichen, die Sie für die PHP-date()
Funktion verwenden würden . (Der einzige Unterschied besteht darin, dass Sie meines Wissens die vordefinierten Konstanten, die in der PHP-date()
Funktion verwendet werden können, nicht verwenden können. )Lokalisierte Daten (und Zeiten)
Da Sie es jedoch im Browser rendern möchten, möchten Sie es wahrscheinlich in einem für Menschen lesbaren Format anzeigen, das für die Sprache und den Standort des Benutzers lokalisiert ist. Anstatt die Lokalisierung selbst durchzuführen , können Sie hierfür die Intl-Erweiterung verwenden (die den IntlDateFormatter von PHP verwendet ). Es bietet einen Filter
localizeddate
, der Datum und Uhrzeit in einem lokalisierten Format ausgibt.Argumente für
localizeddate
:date_format
: Eine der Formatzeichenfolgen (siehe unten)time_format
: Eine der Formatzeichenfolgen (siehe unten)locale
: (optional) Verwenden Sie diese Option, um das konfigurierte Gebietsschema zu überschreiben. Lassen Sie dieses Argument weg, um das Standardgebietsschema zu verwenden, das in der Symfony-Konfiguration konfiguriert werden kann.(Weitere Informationen finden Sie in den Dokumenten. Die vollständige Liste der möglichen Argumente finden Sie hier.)
Für
date_format
und könnentime_format
Sie eine der folgenden Zeichenfolgen verwenden:'none'
Wenn Sie dieses Element nicht einschließen möchten'short'
für den am meisten abgekürzten Stil (13.12.52 oder 15.30 Uhr in einem englischen Gebietsschema)'medium'
für den mittleren Stil (12. Januar 1952 in englischer Sprache)'long'
für den langen Stil (12. Januar 1952 oder 15.30:32 Uhr in einem englischen Gebietsschema)'full'
für den vollständig spezifizierten Stil (Dienstag, 12. April 1952 n. Chr. oder 15.30:42 Uhr PST in einem englischen Gebietsschema)Beispiel
Wenn Sie beispielsweise das Datum in einem Format anzeigen möchten, das dem entspricht
February 6, 2014 at 10:52 AM
, verwenden Sie die folgende Zeile in Ihrer Twig-Vorlage:Wenn Sie jedoch ein anderes Gebietsschema verwenden, wird das Ergebnis für dieses Gebietsschema lokalisiert:
6 februari 2014 10:52
für dasnl
Gebietsschema;6 février 2014 10:52
für dasfr
Gebietsschema;6. Februar 2014 10:52
für dasde
Gebietsschema; etc.Wie Sie sehen können, werden
localizeddate
nicht nur die Monatsnamen übersetzt, sondern auch die lokalen Notationen verwendet. In der englischen Notation wird das Datum nach dem Monat angegeben, in den niederländischen, französischen und deutschen Notationen vor dem Monat. Englische und deutsche Monatsnamen beginnen mit einem Großbuchstaben, während niederländische und französische Monatsnamen in Kleinbuchstaben geschrieben sind. Und an deutsche Daten ist ein Punkt angehängt.Installieren / Einstellen des Gebietsschemas
Installationsanweisungen für die Intl-Erweiterung finden Sie in dieser separaten Antwort .
quelle
Vergiss nicht
Entität :
Aussicht:
>> Ausgabe 2013-09-18 16:14:20
quelle
Es gibt ein symfony2-Tool zum Anzeigen des Datums im aktuellen Gebietsschema:
https://github.com/michelsalib/BCCExtraToolsBundle
quelle
Für die vollständige Datums- und Uhrzeitzeichenfolge einschließlich Zeitzonenversatz.
quelle
Sie können auf folgende Weise rendern
{{post.published_at | date ("m / d / Y")}}
Weitere Informationen finden Sie unter http://twig.sensiolabs.org/doc/filters/date.html
quelle
Ich weiß, dass dies eine ziemlich alte Frage ist, aber ich habe diese Frage heute gefunden, aber die Antworten waren nicht das, was ich brauchte.
Also hier ist was ich brauchte.
Wenn Sie wie ich das aktuelle Datum im Zweig anzeigen möchten, können Sie Folgendes verwenden:
{{ "now"|date("m/d/Y") }}
Siehe dazu die Dokumentation:
Datum im Zweig
quelle
Um Fehler beim Nullwert zu vermeiden, können Sie diesen Code verwenden:
quelle