Manipuler les dates en PHP avec symfony
Par jaycreation le mardi, juin 15 2010, 11:54 - php - Lien permanent
Manipuler les dates en PHP est souvent problématique et lorsqu’on doit gérer les formats pour plusieurs langues ça devient un vrai casse tête.
Heureusement, Symfony joue son rôle de framework en nous facilitant beaucoup les choses.
Voici comment gérer facilement les calculs et l’affichage des dates avec Symfony.
Afficher les dates au bon format avec Symfony :
1- Au plus simple :
Avec Symfony, vous avez l’habitude d’appeler vos entrées de base de données sous forme d’objet.
ex : <?php echo $collaborateur->getDateEntree(); ?>
Mais cette commande va afficher la date telle qu’elle est stockée dans votre BDD.Il existe une manière simple sans transformer votre date pour l’afficher correctement :
ex : <?php echo $collaborateur->getDateEntree("d/m/Y"); ?>
Votre date qui s’affichera au format français quel que soit son type dans la base (date, datetime, timestamp, etc…).Vous pouvez passer tous les arguments de la fonction php date().
2- Avec une constante :
Bien sur nous sommes sous symfony donc on va faire plus propre.
Que se passe-t-il si nous souhaitons avoir un site multilingue ? Ou si le format de la date doit changer.
Nous devrons passer sur toutes les pages pour changer le format des dates.
Nous allons donc améliorer un peu la technique.
Allez dans le fichier app.yml de votre application.
Nous allons créer une constante :
fr: format_date : "d/m/Y" format_date_horaire: "d/m/Y H:i"
Ensuite pour vos dates vous allez appeler la constante :
ex : <?php echo $collaborateur->getDateEntree(sfConfig::get("app_fr_format_date")); ?>
Pour les sites multilingues il vous suffira de changer le « fr » dans l’appel de la constante.
Si un changement survient il vous suffira de changer une fois la constante dans le fichier app.yml pour que tout votre site soit modifié.
3- Seconde solution, avec le helper format_date :
Vous pouvez également utiliser un helper pour formater la date.
Je trouve cette solution plus compliquée mais elle à parfois ses avantages, elle est plus simple à utiliser dans le cas des sites multilingues par exemple.
En haut de votre template, il vous faudra ajouter un appel au helpers Date :
<?php use_helper('date’); ?>
Puis utiliser le helpers « format_date » au moment de l’affichage :
ex : <?php echo format_date($ad_collaborateur_contrat->getUpdatedAt(), 'dd-MM-yyyy HH:mm:ss'); ?>Passez en premier votre date, en second le format.
Le principal intérêt de ce helper est qu’il offre des raccourcis de formats, et que l’on peut lui passer un paramètre régional.
ex: <?php echo format_date($ad_collaborateur_contrat->getUpdatedAt(), 'dd-MM-yyyy HH:mm:ss'); ?>donne le même résultat que :
<?php echo format_date($ad_collaborateur_contrat->getUpdatedAt(), 'p', 'fr_FR'); ?>
Ce helper se règle sur le langage actuel de l’utilisateur. Donc rien à faire, il s’internationalise tout seul.
Vous n’avez donc pas, normalement, à passer le paramètre régional, Symfony s’en occupe pour vous.
4- Faire des calculs sur les dates et étendre les possibilités :
Le plugin sfDateTimePLugin va vous rendre des services bien utiles :Grâce à lui vous pourrez ajouter des jours, des mois, des années des heures à vos dates, trouver sans calcul la date du lendemain, le premier jour de la semaine etc…
à essayer absolument, c’est le moyen le plus simple pour faire des calculs !
Disponible à cette adresse : http://www.symfony-project.org/plugins/sfDateTimePlugin
Commentaires
Petite précision pour le premier et deuxième cas d’utilisation, cela fonctionne avec propel…
Sinon pour doctrine:
$objet->getDateTimeObject(‘champ_contenant_la_date’)->format(‘d/m/y’)Un timestamp UNIX reste pour moi le plus efficace (avec quelques fonctions php, tout est possible ;) )
Un bon vieux timestamp à l’ancienne !
Effectivement tout est possible, mais qu’est ce que c’est pénible à utiliser.
J’ai une autre classe indépendente de Symfony pour aider d’ailleurs :
http://blog.jaycreation.net/post/da…)-manipulez-facilement-vos-dates-en-php-grace-a-la-POO
Un grand merci à toi Quiche !
Un timestamp UNIX reste pour moi le plus efficace (avec quelques fonctions php, tout est possible