cs_jeca
Messages postés341Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention14 juillet 2011
-
3 août 2008 à 08:29
Utilisateur anonyme -
3 févr. 2011 à 08:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Salut,
Puisque vous semblez bien informé au sujet des conversions de dates, j'ai une question à vous soumettre:
Je dois convertir un TimeStamp en date hh mm ss mais je n'arrive pas à savoir comment est construit ce TimeStamp!
exemple: 3375177394 qui devrait correspondre à environ 14/12/2010 à 18h10
J'ai essayé pas mal de chose mais sans résultat!
Qui peut m'aider?
Merci d'avance,
PhilLu
tiger222
Messages postés13Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention27 septembre 2008 17 août 2008 à 16:22
@yoman64 : tu as tout a fait raison sur le fait que je n'aurai peut être pas du poster cette source. La prochaine fois je ferai plus attention ;)
@yopai_v : merci beaucoup pour cette analyse et ces explications !
yopai_v
Messages postés47Date d'inscriptionjeudi 7 septembre 2006StatutMembreDernière intervention21 avril 2010 12 août 2008 à 22:40
Juste quelques petites remarques pour enfoncer un peu le clou avec mon grain de sel.
Concernant l'appel à date() :
- depuis PHP 5.1, penser à appeler date_default_timezone_set() (ou à positionner la variable d'env. TZ) dans l'initialisation du script
- dans l'écriture date('Y-m-d H:i:s', time())" lue dans le commentaire de bentom32390
- d'une part, ça ne correspond pas au but de la source (qui est de convertir un timestamp donné)
- d'autre part le 2e paramètre est inutile dans ce cas-là (c'est la valeur par défaut du paramètre)
Concernant le code :
- je rejoins tout le monde : lire la doc et parcourir les classes Pear devrait te donner un aperçu correct de ce qui existe et qu'il n'y a pas besoin de redévelopper.
- du coup, j'ai l'impression que personne n'a regardé ta source en détail. Je vais donc t'indiquer ce qui, d'après-moi, est mal écrit dans ton code.
Ce qui me choque en première lecture, c'est que tu as programmé une librairie de fonctions, pas une classe. De 2 choses l'une :
* soit une instance de ta classe représente une date unique. Alors les différentes méthodes (afficher, convertir)n'ont pas besoin de paramètre, et doivent se baser sur les propriétés de ton objet (initialisées par le constructeur)
A l'appel :
date1 = new dateUTC(12345678)
date1->afficher();
date2 = new dateUTC(987654321)
date2->afficher();
* soit ta classe gère toutes les dates. Alors le constructeur ne prend pas de paramètres, et les méthodes afficher et convertir peuvent être des méthodes statiques
dateHandler::afficher(12345678);
dateHandler::afficher(987654321);
ta classe peut aussi être un singleton (cherche sur Google), ce qui donnerait à l'appel :
dateHandler = dateUTCHandler::getInstance();
dateHandler->afficher(12345678);
dateHandler->afficher(12345678);
Ensuite, la méthode "convertir" est inutile. Elle porte d'ailleurs mal son nom, puisqu'elle génère un affichage (ce qui devrait être le rôle d'"afficher").
Je serais toi, c'est donc convertir() qui devrait faire tout le travail, mais *retourner* (return) la valeur; le corps d'afficher() serait alors { echo $this->convertir(...); }
Enfin, ta méthode est beaucoup trop écrite de manière itérative.
N'hésite pas à découper ton algorithme en sous-méthodes :
- tu y gagneras en lisibilité
- cela permettra de surcharger facilement ta classe
Une dernière chose, prend l'habitude de toujours mettre les accolades pour un if.
Le jour où tu écriras :
if (je_suis_sur_de vouloir_formater)
format;
et que machinalement, tu ajouteras une ligne de debug :
if (je_suis_sur_de vouloir_formater)
log("formatage");
format;
tu regretteras de ne pas les avoir mises !
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 5 août 2008 à 15:10
Salut,
Je reprends l'avis des autres, pourquoi avoir fait une classe alors que php dispose en natif d'une bonne dizaine de fonctions pour manipuler les dates et timestamps qui sont évidement beaucoup plus rapides ?
Mis à part que ta classe permet sans doute aux débutants de comprendre un peu mieux ce qu'est un timestamp (dans ce cas ce serait plus un tutoriel qu'une source), je ne vois vraiment pas ce que cela apporte à la communauté de phpcs.
Ne prends pas ça pour des critiques personnelles, je m'interroge seulement sur l'intérêt d'un tel code pour phpcs, parce qu'après tout c'est bien que tu apprennes en faisant ce genre d'exercices, mais pas besoin de tout poster ce qu'on fait ^^ (au moins ce n'est pas un convertisseur d'euros, je te l'accore :P)
tiger222
Messages postés13Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention27 septembre 2008 3 août 2008 à 13:56
Cette classe n'est pas là pour réinventer la manipulation de format de date.
En fait, cette classe me permet de convertir les dates d'inscription des utilisateurs d'un Simple Machines Forum vers WordPress car j'écrit un module de conversion des utilisateurs de l'un à l'autre.
Mais c'est vrai qu'elle n'est pas à utiliser ailleurs puisqu'il existe déjà tout ce qu'il faut.
C'est plutôt un exercice intéressant pour ma part.
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 3 août 2008 à 12:58
Salut,
Dommage que tu réinventes la roue et en moins bien. PHP 5 intègre nativement une classe de manipulation de format de date à travers des objets.
Sinon il y'a plus simple pour faire de la conversion de date :
tiger222
Messages postés13Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention27 septembre 2008 3 août 2008 à 12:49
Ah ok, merci pour la précision.
cs_jeca
Messages postés341Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention14 juillet 201114 3 août 2008 à 12:39
La classe n'est pas plus précise ; elle affiche simplement l'heure UTC, alors que la fonction 'date()' affiche l'heure locale.
bentom32390
Messages postés25Date d'inscriptionmercredi 28 novembre 2007StatutMembreDernière intervention21 février 2009 3 août 2008 à 11:25
sa m'étonne vérifie bien avec heure que ta sur ton
sa affiche heure exacte
tiger222
Messages postés13Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention27 septembre 2008 3 août 2008 à 11:20
En effet date('Y-m-d H:i:s', time()); le fait automatiquement, mais pour un entrainement c'est sympa.
Et puis par exemple, ce code n'est pas tout à fait correct :
echo date('Y-m-d H:i:s', 1217236577); renvoye 2008-07-28 11:16:17
Alors que
new dateWP(1217236577); renvoye 2008-07-28 09:16:17
La classe est donc plus précise sur le coup.
toutoos
Messages postés56Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention17 octobre 2009 3 août 2008 à 11:09
J'ai la même critique a te faire que se kon di les autres!
Mais je doit avouer que c'est un bon entrènement au classe et aux variables quand même! Mais dsl je n'est pas tester!
Renus02
Messages postés182Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention22 octobre 2010 3 août 2008 à 11:00
Salut ...
Ben tout est dit ... désolé ....
bentom32390
Messages postés25Date d'inscriptionmercredi 28 novembre 2007StatutMembreDernière intervention21 février 2009 3 août 2008 à 09:45
bonjours
je trouve que tu tes compliquer la vie avec juste un ligne on arrive a la même chose:
date('Y-m-d H:i:s', time());
et la date et converti
cs_jeca
Messages postés341Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention14 juillet 201114 3 août 2008 à 08:29
Bonjour,
Je ne suis pas certain d'avoir tout compris. Mais s'il ne s'agit que de transformer un timestamp en date, il me semble que
date('Y-m-d H:i:s', $timestamp)
devrait suffire, non ?
3 févr. 2011 à 08:16
Puisque vous semblez bien informé au sujet des conversions de dates, j'ai une question à vous soumettre:
Je dois convertir un TimeStamp en date hh mm ss mais je n'arrive pas à savoir comment est construit ce TimeStamp!
exemple: 3375177394 qui devrait correspondre à environ 14/12/2010 à 18h10
J'ai essayé pas mal de chose mais sans résultat!
Qui peut m'aider?
Merci d'avance,
PhilLu
17 août 2008 à 16:22
@yopai_v : merci beaucoup pour cette analyse et ces explications !
12 août 2008 à 22:40
Concernant l'appel à date() :
- depuis PHP 5.1, penser à appeler date_default_timezone_set() (ou à positionner la variable d'env. TZ) dans l'initialisation du script
- dans l'écriture date('Y-m-d H:i:s', time())" lue dans le commentaire de bentom32390
- d'une part, ça ne correspond pas au but de la source (qui est de convertir un timestamp donné)
- d'autre part le 2e paramètre est inutile dans ce cas-là (c'est la valeur par défaut du paramètre)
Concernant le code :
- je rejoins tout le monde : lire la doc et parcourir les classes Pear devrait te donner un aperçu correct de ce qui existe et qu'il n'y a pas besoin de redévelopper.
- du coup, j'ai l'impression que personne n'a regardé ta source en détail. Je vais donc t'indiquer ce qui, d'après-moi, est mal écrit dans ton code.
Ce qui me choque en première lecture, c'est que tu as programmé une librairie de fonctions, pas une classe. De 2 choses l'une :
* soit une instance de ta classe représente une date unique. Alors les différentes méthodes (afficher, convertir)n'ont pas besoin de paramètre, et doivent se baser sur les propriétés de ton objet (initialisées par le constructeur)
A l'appel :
date1 = new dateUTC(12345678)
date1->afficher();
date2 = new dateUTC(987654321)
date2->afficher();
* soit ta classe gère toutes les dates. Alors le constructeur ne prend pas de paramètres, et les méthodes afficher et convertir peuvent être des méthodes statiques
dateHandler::afficher(12345678);
dateHandler::afficher(987654321);
ta classe peut aussi être un singleton (cherche sur Google), ce qui donnerait à l'appel :
dateHandler = dateUTCHandler::getInstance();
dateHandler->afficher(12345678);
dateHandler->afficher(12345678);
Ensuite, la méthode "convertir" est inutile. Elle porte d'ailleurs mal son nom, puisqu'elle génère un affichage (ce qui devrait être le rôle d'"afficher").
Je serais toi, c'est donc convertir() qui devrait faire tout le travail, mais *retourner* (return) la valeur; le corps d'afficher() serait alors { echo $this->convertir(...); }
Enfin, ta méthode est beaucoup trop écrite de manière itérative.
N'hésite pas à découper ton algorithme en sous-méthodes :
- tu y gagneras en lisibilité
- cela permettra de surcharger facilement ta classe
Une dernière chose, prend l'habitude de toujours mettre les accolades pour un if.
Le jour où tu écriras :
if (je_suis_sur_de vouloir_formater)
format;
et que machinalement, tu ajouteras une ligne de debug :
if (je_suis_sur_de vouloir_formater)
log("formatage");
format;
tu regretteras de ne pas les avoir mises !
5 août 2008 à 15:10
Je reprends l'avis des autres, pourquoi avoir fait une classe alors que php dispose en natif d'une bonne dizaine de fonctions pour manipuler les dates et timestamps qui sont évidement beaucoup plus rapides ?
Mis à part que ta classe permet sans doute aux débutants de comprendre un peu mieux ce qu'est un timestamp (dans ce cas ce serait plus un tutoriel qu'une source), je ne vois vraiment pas ce que cela apporte à la communauté de phpcs.
Ne prends pas ça pour des critiques personnelles, je m'interroge seulement sur l'intérêt d'un tel code pour phpcs, parce qu'après tout c'est bien que tu apprennes en faisant ce genre d'exercices, mais pas besoin de tout poster ce qu'on fait ^^ (au moins ce n'est pas un convertisseur d'euros, je te l'accore :P)
3 août 2008 à 13:56
En fait, cette classe me permet de convertir les dates d'inscription des utilisateurs d'un Simple Machines Forum vers WordPress car j'écrit un module de conversion des utilisateurs de l'un à l'autre.
Mais c'est vrai qu'elle n'est pas à utiliser ailleurs puisqu'il existe déjà tout ce qu'il faut.
C'est plutôt un exercice intéressant pour ma part.
3 août 2008 à 12:58
Dommage que tu réinventes la roue et en moins bien. PHP 5 intègre nativement une classe de manipulation de format de date à travers des objets.
Sinon il y'a plus simple pour faire de la conversion de date :
<?php
echo strftime('mon format', strtotime('2008-08-03 12:45:21'));
?>
++
3 août 2008 à 12:49
3 août 2008 à 12:39
3 août 2008 à 11:25
sa affiche heure exacte
3 août 2008 à 11:20
Et puis par exemple, ce code n'est pas tout à fait correct :
echo date('Y-m-d H:i:s', 1217236577); renvoye 2008-07-28 11:16:17
Alors que
new dateWP(1217236577); renvoye 2008-07-28 09:16:17
La classe est donc plus précise sur le coup.
3 août 2008 à 11:09
Mais je doit avouer que c'est un bon entrènement au classe et aux variables quand même! Mais dsl je n'est pas tester!
3 août 2008 à 11:00
Ben tout est dit ... désolé ....
3 août 2008 à 09:45
je trouve que tu tes compliquer la vie avec juste un ligne on arrive a la même chose:
date('Y-m-d H:i:s', time());
et la date et converti
3 août 2008 à 08:29
Je ne suis pas certain d'avoir tout compris. Mais s'il ne s'agit que de transformer un timestamp en date, il me semble que
date('Y-m-d H:i:s', $timestamp)
devrait suffire, non ?