Un de mes champs dans une de mes entités est une variable "datetime".
Comment puis-je convertir ce champ en une chaîne à afficher dans un navigateur?
Voici un extrait de code:
{% for game in games %}
...
<td> {{game.gameTeamIdOne.teamName}} </td>
<td> {{game.gameTeamIdTwo.teamName}} </td>
<td> {{game.gameDate}}</td>
</tr>
{% endfor %}
Voici la variable dans ma classe d'entité:
/**
* @var date $gameDate
*
* @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
*/
private $gameDate;
Et voici le message d'erreur que je reçois:
Une exception a été levée lors du rendu d'un modèle ("Erreur fatale capturable: l'objet de la classe DateTime n'a pas pu être converti en chaîne dans ... \ app \ cache \ dev \ twig \ 9b \ ad \ 58fd3bb1517632badf1fdc7fa4a8.php line 33" ) dans "BeerBundle: Games: gameTable.html.twig" à la ligne 10.
{{ game.gameDate|date('Y-m-d H:i:s') }}
pour la date et l'heure. J'ai eu des problèmes pour trouver du personnage pendant quelques minutes.date
fonction de Twig . Sur la base de votre exemple, vous devrez l'envelopper{% if game.gameDate is not empty %} ... {%endif}
DateTime
classe! À la place, utilisez simplement lelocalizeddate
filtre pour Twig .{% if game.gameDate %} {{ game.gameDate|date('Y-m-d H:i:s') }} {% endif %}
serait suggéréVous pouvez utiliser le
date
filtre:la source
__toString()
méthode aurait besoin de savoir dans quel format convertir l'DateTime
objet, et il existe probablement des centaines de formats possibles. Bien sûr, en PHP, vous pouvez utiliser laformat()
méthode sur unDateTime
objet, qui prend un argument de format, et ledate
filtre est simplement l'équivalent Twig de cette méthode.Cela dépend du format dans lequel vous souhaitez afficher la date.
Format de date statique
Si vous souhaitez afficher un format statique, qui est le même pour tous les paramètres régionaux (par exemple ISO 8601 pour un flux Atom), vous devez utiliser le
date
filtre de Twig :Qui retournera toujours un datetime au format suivant:
Les chaînes de format acceptées par le
date
filtre sont les mêmes que celles que vous utiliseriez pour ladate()
fonction PHP . (la seule différence est que, pour autant que je sache, vous ne pouvez pas utiliser les constantes prédéfinies qui peuvent être utilisées dans ladate()
fonction PHP )Dates (et heures) localisées
Cependant, puisque vous souhaitez le rendre dans le navigateur, vous voudrez probablement l'afficher dans un format lisible par l'homme, localisé pour la langue et l'emplacement de l'utilisateur. Au lieu de faire la localisation vous-même, vous pouvez utiliser l' extension Intl pour cela (qui utilise IntlDateFormatter de PHP ). Il fournit un filtre
localizeddate
qui affichera la date et l'heure en utilisant un format localisé.Arguments pour
localizeddate
:date_format
: L'une des chaînes de format (voir ci-dessous)time_format
: L'une des chaînes de format (voir ci-dessous)locale
: (facultatif) Utilisez ceci pour remplacer les paramètres régionaux configurés. Laissez cet argument en dehors pour utiliser les paramètres régionaux par défaut, qui peuvent être configurés dans la configuration de Symfony.(il y en a plus, voir la documentation pour la liste complète des arguments possibles)
Pour
date_format
ettime_format
vous pouvez utiliser l'une des chaînes suivantes:'none'
si vous ne voulez pas inclure cet élément'short'
pour le style le plus abrégé (13/12/52 ou 15h30 dans une langue anglaise)'medium'
pour le style moyen (12 janvier 1952 dans une langue anglaise)'long'
pour le style long (12 janvier 1952 ou 15h30:32 dans une langue anglaise)'full'
pour le style complètement spécifié (mardi 12 avril 1952 AD ou 15h30:42 PST dans une langue anglaise)Exemple
Ainsi, par exemple, si vous souhaitez afficher la date dans un format équivalent à
February 6, 2014 at 10:52 AM
, utilisez la ligne suivante dans votre modèle Twig:Cependant, si vous utilisez un environnement local différent, le résultat sera localisé pour cet environnement local:
6 februari 2014 10:52
pour lesnl
paramètres régionaux;6 février 2014 10:52
pour lesfr
paramètres régionaux;6. Februar 2014 10:52
pour lesde
paramètres régionaux; etc.Comme vous pouvez le voir,
localizeddate
ne traduit pas seulement les noms de mois mais utilise également les notations locales. La notation anglaise place la date après le mois, tandis que les notations néerlandaise, française et allemande la mettent avant le mois. Les noms de mois anglais et allemand commencent par une lettre majuscule, tandis que les noms de mois néerlandais et français sont en minuscules. Et les dates allemandes ont un point ajouté.Installation / configuration des paramètres régionaux
Les instructions d'installation de l'extension Intl se trouvent dans cette réponse séparée .
la source
N'oubliez pas
Entité:
Vue:
>> Sortie 2013-09-18 16:14:20
la source
Il existe un outil symfony2 pour afficher la date dans les paramètres régionaux actuels:
https://github.com/michelsalib/BCCExtraToolsBundle
la source
Pour la chaîne d'heure de date complète, y compris le décalage du fuseau horaire.
la source
vous pouvez rendre de la manière suivante
{{post.published_at | date ("m / d / Y")}}
Pour plus de détails, visitez http://twig.sensiolabs.org/doc/filters/date.html
la source
Je sais que c'est une assez vieille question, mais j'ai trouvé cette question aujourd'hui, mais les réponses n'étaient pas ce dont j'avais besoin.
Voici donc ce dont j'avais besoin.
Si vous, comme moi , cherchez à afficher la date actuelle en brindille, vous pouvez utiliser ce qui suit:
{{ "now"|date("m/d/Y") }}
Voir la documentation à ce sujet:
date en brindille
la source
Pour éviter une erreur sur la valeur nulle, vous pouvez utiliser ce code:
la source