dateOp(), manipulez facilement vos dates en php grace à la POO
Par jaycreation le samedi, mai 8 2010, 12:04 - php - Lien permanent
Cette classe permet la manipulation aisée des dates.
Réalisée à l'origine par wikistuce (http://www.wikistuce.info/doku.php/php/classe/operation_sur_les_dates) afin de permettre une manipulation plus facile des dates avec PHP.
J'y ai ajouté des fonctionnalités.
Vous pouvez désormais, en plus des possibilités de base,
- modifier indépendamment, les jours, les mois, les années les heures ou les minutes de votre date.
ex : $madate = new dateOp(‘15/01/1980’, jj/mm/aaaa) ;
$madate->setAnnees(‘2010’);
$madate->GetDate(’ jj/mm/aaaa’) ; //renvoie : 15/01/2010
- Comparer les dates dans des conditions directes. Ex :
ex : $madate = new dateOp(‘15/01/1980’, jj/mm/aaaa) ;
$madate->esAnterieurA(‘22/10/19210’, jj/mm/aaaa) //renvoie true ou false
Vous avez à disposition les méthodes : esPosterieurA, esAnterieurA, esEgaleA, esPosterieurOuEgaleA, esAnterieurOuEgaleA
Vous pouvez enfin comparer simplement une date de naissance à une autre date pour savoir si l’anniversaire d’une personne est passé présent ou à venir cette année :
ex : $madate = new dateOp(date(‘d/m/Y’), jj/mm/aaaa) ;
$madate = new dateOp(date(‘d/m/Y’), jj/mm/aaaa) ; $madate ->anniversaire(‘25/15/1980’,"jj/mm/aaaa") ; /* renvoie : ‘today‘ si l'anniversaire est aujourd'hui * ‘apres si l'anniversaire n'est pas encore passé * ‘passe’ si l'anniversaire est déjà passé */
Le reste de la documentation est disponible à l’adresse : http://www.wikistuce.info/doku.php/php/classe/operation_sur_les_dates
N’hésitez pas à me faire part de vos remarques, de vos besoins d’amélioration, ou des améliorations dont vous avez besoin.
//dans une classe date.php ou date.class.php
<?php
/*
*
* réalisé à l'origine par wikistuce
* toute la documentation se trouve à l'adresse :
* http://www.wikistuce.info/doku.php/php/classe/operation_sur_les_dates
*
* */
class
dateOp {
public function dateOp($dat,$format="jj/mm/aaaa hh:ii:ss") {
$this->errno = array();
if (strlen($dat)!=strlen($format))
{
$this->_error("Format de date incompatible avec la date
fournie");
return false;
}
$this->dat['origine']=$dat;
$this->format=strtolower($format);
return $this->_ExplodeDate($this->dat,$this->format);
}
public function AjouteJours($nb) {
$this->dat['jj']+=floatval($nb);
return true;
}
public function AjouteMois($nb) {
$this->dat['mm']+=floatval($nb);
return true;
}
public function AjouteAnnees($nb)
{
$this->dat['aaaa']+=floatval($nb);
return true;
}
public function AjouteHeures($nb)
{
$this->dat['hh']+=floatval($nb);
return true;
}
public function AjouteMinutes($nb)
{
$this->dat['ii']+=floatval($nb);
return true;
}
public function AjouteSecondes($nb)
{
$this->dat['ss']+=floatval($nb);
return true;
}
/*Ajouté par Jérémy gachet
* @param = $nb
* permet de spécifier une année à une date courante.
* pratique pour comparer une date à une date de naissance
* */
public function SetAnnees($nb) {
$this->dat['aaaa']=floatval($nb);
return true;
}
/*Ajouté par Jérémy gachet
* @param = $nb
* permet de spécifier les mois à une date courante.
* */
public function SetMois($nb) {
$this->dat['mm']=floatval($nb);
return true;
}
/*Ajouté par Jérémy gachet
* @param = $nb
* permet de spécifier les jours à une date courante.
* */
public function SetJours($nb) {
$this->dat['jj']=floatval($nb);
return true;
}
/*Ajouté par Jérémy gachet
* @param = $nb
* permet de spécifier les minutes à une date courante.
* */
public function SetMinutes($nb) {
$this->dat['ii']=floatval($nb);
return true;
}
/*Ajouté par Jérémy gachet pour jaycréation
* @param = $nb
* permet de spécifier les secondes à une date courante.
* */
public function SetSecondes($nb) {
$this->dat['ss']=floatval($nb);
return true;
}
/*Modifié par Jérémy gachet pour jaycréation
* Jours Total renvoie désormais un nombre négatif si la date passée en argument est
* posterieur à la date passée à la création de la classe
*
* */
public function DiffenrenceEntreDate($dat,$format="jj/mm/aaaa hh:ii:ss") {
if (strlen($dat)!=strlen($format))
{
$this->_error("Format de date incompatible avec la date fournie");
return false;
}
$this->dat2['origine']=$dat;
$this->format2=strtolower($format);
$this->_ExplodeDate($this->dat2,$this->format2);
$d1=mktime($this->dat['hh'],$this->dat['ii'],$this->dat['ss'],$this->dat['mm'],$this->dat['jj'],$this->dat['aaaa']);
$d2=mktime($this->dat2['hh'],$this->dat2['ii'],$this->dat2['ss'],$this->dat2['mm'],$this->dat2['jj'],$this->dat2['aaaa']);
$d=$d2-$d1;
return array("ans"=>date('Y',$d)-1970,
"mois"=>date('m',$d)-1,
"jours"=>date('d',$d)-1,
"joursTotal"=>$d/60/60/24,
"heures"=>date("G",$d)-1,
"minutes"=>date("i",$d),
"secondes"=>date("s",$d));
}
* Ajout de comparaison directe
* */
public function esPosterieurA($dat,$format="jj/mm/aaaa hh:ii:ss"){
$difference = $this->DiffenrenceEntreDate($dat,$format);
if($difference["joursTotal"]<0){return true;}
else{return false;}
}
public function esAnterieurA($dat,$format="jj/mm/aaaa hh:ii:ss"){
$difference = $this->DiffenrenceEntreDate($dat,$format);
if($difference["joursTotal"]>0){return true;}
else{return false;}
}
public function esEgaleA($dat,$format="jj/mm/aaaa hh:ii:ss"){
$difference = $this->DiffenrenceEntreDate($dat,$format);
if($difference["joursTotal"]==0){return true;}
else{return false;}
}
public function esPosterieurOuEgaleA($dat,$format="jj/mm/aaaa hh:ii:ss"){
$difference = $this->DiffenrenceEntreDate($dat,$format);
if($difference["joursTotal"]<=0){return true;}
else{return false;}
}
public function esAnterieurOuEgaleA($dat,$format="jj/mm/aaaa hh:ii:ss"){
$difference = $this->DiffenrenceEntreDate($dat,$format);
if($difference["joursTotal"]>=0){return true;}
else{return false;}
}
/*comparaison anniversaire
* Compare la date passé à la contruction et la date de naissance passée ensuite.
* Permet savoir si un anniversaire est passé present ou a venir
*
* attend une date d'anniversaire (25-01-1980)
* renvoie : today si l'anniveraire est aujourd'hui
* apres si l'anniversaire n'est pas encore passé
* passe si l'anniversaire est déja passé
* */
public function anniversaire($anniversaire,$format="jj/mm/aaaa hh:ii:ss"){
$anniversaire = new dateOp($anniversaire, $format);
$anniversaire->setAnnees($this->GetDate("aaaa"));
if($this->esEgaleA($anniversaire->getDate("jj-mm-aa"), "jj-mm-aa")){
return "today";}
else if($this->esAnterieurA($anniversaire->getDate("jj-mm-aa"), "jj-mm-aa")){
return "apres";}
else if($this->esPosterieurA($anniversaire->getDate("jj-mm-aa"), "jj-mm-aa")){
return "passe";}
}
/*fin d'ajout*/
public function GetDate($format="jj/mm/aaaa") {
$format=str_replace(array('jj','j','m','nn','aaaa','aa','hh','h','ii','ss'),array('d','D','n','m','Y','y','H','G','i','s'),$format);
return date($format,mktime($this->dat['hh'],$this->dat['ii'],$this->dat['ss'],$this->dat['mm'],$this->dat['jj'],$this->dat['aaaa']));
}
public function _ExplodeDate(&$dat,$format) {
$j[0]=2;
if (($j[1]=strpos($format,'jj'))===false) {
$j[0]=1;
if (($j[1]=strpos($format,'j'))===false)
$this->_error($format." : Les jours n'ont pas été trouvés... Les jours doivent être précisés par 'jj' ou par 'j' (ex: jj/mm/aaaa)");
}
$m[0]=2;
if (($m[1]=strpos($format,'mm'))===false)
$m[0]=1;
if (($m[1]=strpos($format,'m'))===false)
$this->_error($format." : Les mois n'ont pas été trouvés... Les mois doivent être précisés par 'mm' ou par 'm' (ex: jj/mm/aaaa)");
$a[0]=4;
if (($a[1]=strpos($format,'aaaa'))===false) {
//cherche pour un aa au lieu de aaaa
$a[0]=2;
if (($a[1]=strpos($format,'aa'))===false)
$this->_error($format." : Les années n'ont pas été trouvés... Les années doivent être précisés par 'aaaa' ou par 'aa' (ex: jj/mm/aaaa)");
}
$h[0]=2;
if (($h[1]=strpos($format,'hh'))===false)
$h[0]=1;
if (($h[1]=strpos($format,'h'))===false)
$this->_error($format." : Les heures n'ont pas été trouvées... Les heures doivent être précisées par 'hh' ou 'h' (ex: jj/mm/aaaa hh:ii:ss)");
$i[0]=2;
if (($i[1]=strpos($format,'ii'))===false)
$i[0]=1;
if (($i[1]=strpos($format,'i'))===false)
$this->_error($format." : Les minutes n'ont pas été trouvées... Les minutes doivent être précisées par 'ii' ou 'i' (ex: jj/mm/aaaa hh:ii:ss)");
$s[0]=2;
if (($s[1]=strpos($format,'ss'))===false)
$s[0]=1;
if (($s[1]=strpos($format,'s'))===false)
$this->_error($format." : Les secondes n'ont pas été trouvées... Les secondes doivent être précisés par 'ss' ou 's' (ex: jj/mm/aaaa hh:ii:ss)");
$dat['jj'] =($j[1]!==false)?floatval(substr($dat['origine'],$j[1],$j[0])):1;
$dat['mm'] =($m[1]!==false)?floatval(substr($dat['origine'],$m[1],$m[0])):1;
$dat['aaaa'] =($a[1]!==false)?floatval(substr($dat['origine'],$a[1],$a[0])):1970;
if ($a[0]==2)
$dat['aaaa']=floatval(substr(date('Y'),0,2).$dat['aaaa']);
$dat['hh'] =($h[1]!==false)?floatval(substr($dat['origine'],$h[1],$h[0])):0;
$dat['ii'] =($i[1]!==false)?floatval(substr($dat['origine'],$i[1],$i[0])):0;
$dat['ss'] =($s[1]!==false)?floatval(substr($dat['origine'],$s[1],$s[0])):0;
return true;
}
public function _error($str) {
$this->errno[]=$str;
return true;
}
}
?>
Commentaires
Merci pour tes modifications, c’est au top :)