L'un de mes champs dans l'une de mes entités est une variable "datetime".
Comment puis-je convertir ce champ en 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 irrécupérable 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.
Bien que vous puissiez utiliser le
{{ game.gameDate|date('Y-m-d') }}
approche, gardez à l’esprit que cette version ne respecte pas les paramètres régionaux de l’utilisateur, ce qui ne devrait pas poser de problème si un site est utilisé uniquement par des utilisateurs d’une même nationalité. Les utilisateurs internationaux doivent afficher la date du jeu de manière totalement différente, par exemple en étendant la classe \DateTime
et en y ajoutant une méthode __toString()
qui vérifie les paramètres régionaux et agit en conséquence.
Éditer :
Comme l'a souligné @Nic dans un commentaire, si vous utilisez le Intl extension de Twig , vous aurez un filtre localizeddate
qui affiche la date dans les paramètres régionaux de l'utilisateur. De cette façon, vous pouvez abandonner mon idée précédente d’étendre \DateTime
.
Vous pouvez utiliser le filtre date
:
{{ game.gameDate|date("m/d/Y") }}
Cela dépend du format d'affichage de la date.
Si vous souhaitez afficher un format statique identique pour tous les paramètres régionaux (par exemple, ISO 8601 pour un flux Atom,), vous devez utiliser le type date
filter :
{{ game.gameDate|date('Y-m-d\\TH:i:sP') }}
Ce qui retournera toujours une date/heure au format suivant:
2014-05-02T08: 55: 41Z
Les chaînes de format acceptées par le filtre date
sont les mêmes que celles que vous utiliseriez pour fonction date()
de 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 la fonction PHP date()
)
Toutefois, puisque vous souhaitez l'afficher dans le navigateur, vous souhaiterez 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 le Intl Extension pour cela (qui utilise PHP IntlDateFormatter ). Il fournit un filtre localizeddate
qui générera la date et l'heure en utilisant un format localisé.
localizeddate( date_format, time_format [, locale ] )
Arguments pour localizeddate
:
date_format
: Un des chaînes de format (voir ci-dessous)time_format
: Un des chaînes de format (voir ci-dessous)locale
: (facultatif) Utilisez-le pour remplacer les paramètres régionaux configurés. Laissez cet argument 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 les docs pour la liste complète des arguments possibles)
Pour date_format
et time_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é (12/13/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 après JC ou 15h30:42 HNP dans une langue anglaise)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:
{{ game.gameDate|localizeddate('long', 'short') }}
Toutefois, si vous utilisez des paramètres régionaux différents, le résultat sera localisé pour ces paramètres régionaux:
6 februari 2014 10:52
pour la nl
locale;6 février 2014 10:52
pour la fr
locale;6. Februar 2014 10:52
pour la de
locale; etc.Comme vous pouvez le constater, localizeddate
ne traduit pas seulement les noms de mois, mais utilise également les notations locales. La notation anglaise met la date après le mois, où les notations néerlandaise, française et allemande la mettent avant le mois. Les noms de mois en anglais et en allemand commencent par une lettre majuscule, tandis que les noms de mois en néerlandais et en français sont en minuscule. Et les dates allemandes ont un point ajouté.
Les instructions d’installation pour l’extension Intl se trouvent dans cette réponse distincte .
n'oubliez pas
@ORM\HasLifecycleCallbacks ()
Entity:
/**
* Set gameDate
*
* @ORM\PrePersist
*/
public function setGameDate()
{
$this->dateCreated = new \DateTime();
return $this;
}
Voir:
{{ item.gameDate|date('Y-m-d H:i:s') }}
>> Résultat 2013-09-18 16:14:20
{{game.gameDate | date('c')}} // 2014-02-05T16:45:22+00:00
Pour une date complète, y compris le décalage du fuseau horaire.
vous pouvez rendre de la manière suivante
{{post.published_at | date ("m/j/Y")}}
Pour plus de détails peuvent visiter http://twig.sensiolabs.org/doc/filters/date.html
Il existe un outil symfony2 pour afficher la date dans les paramètres régionaux actuels:
{{ user.createdAt|localeDate }} to have a medium date and no time, in the current locale
{{ user.createdAt|localeDate('long','medium') }} to have a long date and medium time, in the current locale
Je sais que la question est assez ancienne, mais j’ai trouvé la question aujourd’hui, mais les réponses n’étaient pas ce dont j’avais besoin.
Alors voici ce dont j'avais besoin.
Si vous, comme moi , souhaitez afficher la date actuelle dans twig, vous pouvez utiliser le Suivant:
{{ "now"|date("m/d/Y") }}
Voir la documentation à ce sujet: