[poo] objet convertissant un nombre de secondes en différents formats. (ex : 'a sem j h min s').

Soyez le premier à donner votre avis sur cette source.

Vue 4 923 fois - Téléchargée 349 fois

Description

Bonjour, j'ai fais un objet php (ConvertiSecondes) servant à convertir des secondes.
Le zip fournit sur cette page contient un fichier de test que vous pouvez voir a cette adresse :

http://dariumis.webhop.biz/test/duree/

Je ne l'afficherais pas pour ne pas saturer la page de codes. Cet objet retourne les:
Nombre d'années,
Nombre de semaines,
Nombre de jours,
Nombre d'heures,
Nombre de minutes,
Nombre de secondes,

Mais aussi et surtout, pour mettre la durée au format "j h min s", "sem j h min s", "a sem j h min s", "a j h min s" , cet objet retourne :
Nombre de jours dans la dernière année (maxi 365), ou semaines (maxi 7),
Nombre de semaines dans la dernière année (maxi 52),
Nombre d'heure dans la dernière journée (maxi 24),
Nombre de minutes dans la dernière heure (maxi 60),
Nombre de secondes dans la dernière minute (maxi 60),

Les sources sont bien commentées, donc je ne réécrirais pas toutes les explications.

Cet objet prend le nombre de secondes à convertir en paramètre et le nombre de jours que dure une année, comme précisé par neigedhiver, j'ai instancié l'objet à 365.2421875 jours dans l'année pour ce paramètre dans le fichier de test. Chaque valeurs après conversion est retourné par une fonction comme "getNombreAnnee($decimal) " pour le nombre d'années. Elle prend $decimal en paramètre pour indiquer le nombre de chiffres après la virgule à retourner, ainsi, si zéro est renseigné la valeur retourné sera un entier (seul les fonctions retournant des secondes ne prennent pas $decimal).

Source / Exemple :


<?php
/**

  • Cette class permet de convertir un durée exprimé en secondes.
  • Vous pouvez convertir cette durée en:
  • Nombre d'années;
  • Nombre de semaines,
  • Nombre de jours;
  • Nombre d'heures;
  • Nombre de semaines dans année (52 maxi);
  • Nombre de jours dans année (365 maxi);
  • Nombre de jours dans semaine (7 maxi);
  • Nombre d'heures dans journée (23 maxi);
  • Nombre de minutes dans heure (59 maxi);
  • Nombre de secondes dans minute (59 maxi);
*
  • @author Dariumis
  • /
class ConvertiSecondes { //les variables de class private $nombreSemaine; private $nombreAnnee; private $nombreJours; private $nombreHeurs; private $nombreMinutes; private $nombreSecondes; private $heureDansJournee; private $minutesDansHeures; private $secondesDansMinutes; private $joursDansAnnee; private $joursDansSemaine; private $semainesDansAnnee; /**
  • Constructeur de l'objet ConvertiSecondes, cet objet
  • prend en parametre le nombre de secondes, et combien de jours dure votre
  • année.
  • @param $nombreDeSecondes Integer
  • les secondes a convertir.
  • @param $nombreDeJoursDansAnnee Integer,double
  • le nombre de jours d'une l'année.
  • /
public function __construct($nombreDeSecondes,$nombreDeJoursDansAnnee) { /**************************************
  • converti en nombre total
                                                                            • /
//on converti en année et on stock dans la variable de class $this->nombreAnnee=$nombreDeSecondes/(60*60*24*$nombreDeJoursDansAnnee); //on converti en semaines et on stock dans la variable de class $this->nombreSemaine=$nombreDeSecondes/(60*60*24*7); //on converti en jours et on stock dans la variable de class $this->nombreJours=$nombreDeSecondes/(60*60*24); //on converti en heures et on stock dans la variable de class $this->nombreHeurs=$nombreDeSecondes/(60*60); //on converti en minutes et on stock dans la variable de class $this->nombreMinutes=$nombreDeSecondes/60; //on stock les secondes dans la variable de class $this->nombreSecondes=$nombreDeSecondes; /**************************************
  • converti au format
                                                                            • /
//on calcul ce qui reste apres le retrait des années $tampon=$nombreDeSecondes-((60*60*24*$nombreDeJoursDansAnnee)*intval($this->nombreAnnee)); //convertie en nombre de semaines pour la derniere année $this->semainesDansAnnee=$tampon/(60*60*24*7); //convertie en nombre de jours pour la derniere année $this->joursDansAnnee=$tampon/(60*60*24); //on calcul ce qui reste apres le retrait des semaines $tampon=$nombreDeSecondes-(((60*60*24*$nombreDeJoursDansAnnee)*intval($this->nombreAnnee))+((60*60*24*7)*intval($this->semainesDansAnnee))); //convertie en nombre de jours pour la derniere semaines $this->joursDansSemaine=$tampon/(60*60*24); //on calcul ce qui reste apres le retrait des journées $tampon=$nombreDeSecondes-((60*60*24)*intval($this->nombreJours)); //convertie en nombre d'heures pour la derniere journée $this->heureDansJournee=$tampon/(60*60); //on calcul ce qui reste apres le retrait des journées et heures $tampon=$nombreDeSecondes-(((60*60)*intval($this->heureDansJournee))+((60*60*24)*intval($this->nombreJours))); //convertie en nombre d'minutes pour la derniere heures $this->minutesDansHeures=$tampon/60; //on calcul ce qui reste apres le retrait des journées, heures et minutes $this->secondesDansMinutes=$nombreDeSecondes-((60*intval($this->minutesDansHeures))+ (((60*60)*intval($this->heureDansJournee))+((60*60*24)*intval($this->nombreJours)))); } /**
  • fonction retournant la conversion en nombre d'années, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getNombreAnnee($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->nombreAnnee);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->nombreAnnee, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de semaines, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getNombreSemaine($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->nombreSemaine);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->nombreSemaine, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de jours, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getNombreJours($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->nombreJours);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->nombreJours, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre d'heures, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getNombreHeures($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->nombreHeurs);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->nombreHeurs, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de minutes, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getNombreMinutes($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->nombreMinutes);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->nombreMinutes, $decimal,'.', ''); } /**
  • fonction retournant le nombre de seconde.
  • @return Integer.
  • /
public function getNombreSecondes() { return $this->nombreSecondes; } /**
  • fonction retournant la conversion en nombre de jours de 0 a 365, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getJoursDansAnnee($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->joursDansAnnee);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->joursDansAnnee, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de jours de 0 a 7, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getJoursDansSemaine($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->joursDansSemaine);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->joursDansSemaine, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de semaines de 0 a 52, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getSemainesDansAnnee($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->semainesDansAnnee);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->semainesDansAnnee, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre d'heure de 0 a 23, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getHeureDansJournee($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->heureDansJournee);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->heureDansJournee, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre de minutes de 0 a 59, elle prend
  • en parametre le nombre de chiffre aprés la virgule, ainsi, si zéro est
  • renseigné la valeur retourné seras un entier.
  • @param $decimal Integer
  • nombre de chiffre apres la virgule
  • @return Integer,double.
  • /
public function getMinutesDansHeures($decimal) { //si l'on veut un entier if($decimal==0) return intval($this->minutesDansHeures);//on retourne la valeur dans un intval //sinon else //on utilise number_format pour formater le valeur puis on retourne return number_format($this->minutesDansHeures, $decimal,'.', ''); } /**
  • fonction retournant la conversion en nombre d'heure de 0 a 59.
  • @return Integer.
  • /
public function getSecondesDansMinutes() { return $this->secondesDansMinutes; } } ?>

Conclusion :


J'ai vu qu'il y avait un peu le même style de codes sur le site, mais je pense que celui-ci diffère relativement de ceux que j'ai pu voir. De plus peut etre que des fonctions, par défaut de php font là même chose, mais si quelqu'un, qui comme moi, n'en a pas connaissance peut être que dans ce cas mon objet sera utile.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 nov. 2010 à 16:49
Ben oui, c'est parce que peu de scripts utilisent pleinement PHP5.3 que les hébergeurs n'ont aucune raison de se presser de mettre à jour leur version de PHP.
Bien que PHP5.2 soit encore maintenue (corrections de bugs, patches de sécurités, etc), cette banche n'est plus développée. PHP5.3 est stable depuis le 30 juin 2009...
La plupart des hébergeurs (heureusement pas tous) continuent de n'avoir rien à faire de l'avis des utilisateurs...
Une solution pourrait être de quitter son hébergeur PHP5.2 pour aller voir chez la concurrence en expliquant la raison du départ. Mettre à jour son serveur vers PHP5.3 n'est pas quelque chose de franchement compliqué pour un Administrateur Système qui fait son travail.

Cela dit, comme la plupart des utilisateurs continuent d'utiliser des fonctions et une syntaxe de PHP3 (voir l'utilisation abusive des fonction mysql_*), les torts sont relativement partagés.

Continuez donc d'utiliser des technologies qui sont rapidement dépassées, pour ma part, je préfère me tenir à jour de PHP, au moins, comme ça, on peut avancer.
cs_fredhot Messages postés 5 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 20 mai 2014
1 nov. 2010 à 16:20
salut à tous,
pour répondre au 1er post de <<Commentaire de neigedhiver le 28/10/2010 00:30:33>>.
Ben moi quand je fais phpinfo j'ai <>, donc le scrip de 2 lignes et autres fonctions natives de la version 5.3 je peux oublier... pour l'instant.
Donc scrip un peu long mais je ne pourrais pas faire mieux et c'est justement le script qui me manquait pour finaliser une partie d'un projet.
Bonne continuation.
papounet69 Messages postés 2 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 1 novembre 2010
1 nov. 2010 à 16:12
Oui strtotime('1950/10/31') donne bien un résultat !

Mais :
<?php
date_default_timezone_set('Europe/Paris');
echo strtotime('1950/10/31');
?>

Affiche : RIEN !!!
Nota : test réalisé avec PHP 5.2.8
Tout simplement parce que strtotime utilise le timestamp UNIX comme je le signalait dans mon precedent message.
Or je souhaite calculer quelque chose du style :

$diff = strtotime('1656/10/31')-strtotime('1656/10/1');
mais cela ne donne pas le resultat attendu.

Merci tout de même pour ta réponse : tu m'as au moins obligé à relire la doc PHP !
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 nov. 2010 à 14:38
Bon d'accord, ça remonte pas avant le 13 décembre 1901 à 20h55 et 13s...

La comparaison de dates n'est absolument pas un problème. Le vrai problème ce sont les intervalles entre deux dates qui doivent prendre en compte les années bissextiles, les années qui devraient l'être mais ne le sont pas (tous les 128 ans), les années qui n'ont jamais existé à cause des changements de calendriers... Ca, c'est une autre affaire.
Mais la comparaison, il suffit d'un petit algorithme pour savoir si une date est antérieure ou postérieure à une autre.
Evidemment, ça ne se fait pas avec des méthodes "modernes", du fait que, justement, les dates ne sont précises que depuis relativement peu de temps.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 nov. 2010 à 14:30
@Papounet69 : Et un jour l'informatique a commencé à utiliser des nombres entiers naturels...

<?php
date_default_timezone_set('Europe/Paris');
echo strtotime('1950/10/31');
?>

Affiche : -604976400

C'est beau.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.