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);
-
*
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) {
/**************************************
//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;
/**************************************
//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.
1 nov. 2010 à 16:49
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.
1 nov. 2010 à 16:20
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.
1 nov. 2010 à 16:12
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 !
1 nov. 2010 à 14:38
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.
1 nov. 2010 à 14:30
<?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.