UNIX TIME CONVERTER (UTC)

cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 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.

https://codes-sources.commentcamarche.net/source/47486-unix-time-converter-utc

Utilisateur anonyme
3 févr. 2011 à 08:16
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és 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 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és 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 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és 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Derniè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és 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 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és 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
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 :

<?php
echo strftime('mon format', strtotime('2008-08-03 12:45:21'));
?>

++
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
3 août 2008 à 12:49
Ah ok, merci pour la précision.
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
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és 25 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 21 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és 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 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és 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 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és 182 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 22 octobre 2010
3 août 2008 à 11:00
Salut ...

Ben tout est dit ... désolé ....
bentom32390 Messages postés 25 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 21 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és 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
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 ?
Rejoignez-nous