From 32a3d78961fc18717be9b3c2fc23e0d8eaf5f447 Mon Sep 17 00:00:00 2001 From: Damien LASSERRE Date: Thu, 15 Dec 2011 09:37:36 +0000 Subject: [PATCH] Ajout des classes de gestion de dates --- library/commons/chiffres.php | 39 ++++++++++ library/commons/dates.php | 144 +++++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100755 library/commons/chiffres.php create mode 100755 library/commons/dates.php diff --git a/library/commons/chiffres.php b/library/commons/chiffres.php new file mode 100755 index 00000000..54ca0e09 --- /dev/null +++ b/library/commons/chiffres.php @@ -0,0 +1,39 @@ +'zéro', + 1=>'un', + 2=>'deux', + 3=>'trois', + 4=>'quatre', + 5=>'cinq', + 6=>'six', + 7=>'sept', + 8=>'huit', + 9=>'neuf', + 10=>'dix', + 11=>'onze', + 12=>'douze', + 13=>'treize', + 14=>'quatorze', + 15=>'quinze', + 16=>'seize', + 17=>'dix sept', + 18=>'dix huit', + 19=>'dix neuf', + 20=>'vingt', + 30=>'trente', + 40=>'quarante', + 50=>'cinquante', + 60=>'soixante', + 70=>'soixante dix', + 80=>'quatre vingt', + 90=>'quatre vingt dix'); + + public function ChiffresEnLettres($chiffre) { + return array_search($chiffre, self::$tabChiffresEnLEttres); + } +} + + ?> \ No newline at end of file diff --git a/library/commons/dates.php b/library/commons/dates.php new file mode 100755 index 00000000..fb6ce0c2 --- /dev/null +++ b/library/commons/dates.php @@ -0,0 +1,144 @@ +détail de la classe

+ * + * @name nom de la classe + * @author Nom de l'auteur + * @link + * @copyright Prénom Nom Année + * @version 1.0.0 + * @package Nom du package + */ + + class WDate { + + private static $tabMoisEnLettres = array( 1=>'Janvier', + 2=>'Février', + 3=>'Mars', + 4=>'Avril', + 5=>'Mai', + 6=>'Juin', + 7=>'Juillet', + 8=>'Août', + 9=>'Septembre', + 10=>'Octobre', + 11=>'Novembre', + 12=>'Décembre'); + + /** Retourne le numéro du mois donné au format texte (janvier, mars, etc...) + * @param string Mois en toute lettres (janvier, mars, etc...) + * @return string Mois en Chiffe (1, 3, 12) / false en cas d'erreur + */ + public function getNumMois($moisEnLettres) { + foreach (self::$tabMoisEnLettres as $num=>$mois) + $tabMoisSansAccents[$num]=strtr($mois, 'ééû','eeu'); + return array_search(ucfirst(strtolower(strtr($moisEnLettres, 'ééû','eeu'))), $tabMoisSansAccents); + } + + /** Retourne le libellé nu numéro du mois passé en paramètre + * @param int $moisEnChiffre + * @return string Libellé du mois / false si le mois passé en paramètre est invalide + */ + public function getLibelleMois($moisEnChiffre) { + if ($moisEnChiffre>0 && $moisEnChiffre<13) + return self::$tabMoisEnLettres[$moisEnChiffre]; + + return false; + } + + /** + * Conversion de formats de dates selon les formats de dates définits en php + * @param string Format de la date d'entrée + * @param string Format de la date de sortie + * @param string Date d'entrée + * @return string Date formatée + */ + public function dateT($formatIN, $formatOUT, $date) + { + $M=''; + switch ($formatIN) + { + case 'd M Y': + $tmp=explode(' ', $date); $d=str_replace('1er', '1', $tmp[0]); + $m=getNumMois($tmp[1]); $Y=$tmp[2]; + break; + case 'dMY': + $Y = substr($date,-4); + if (substr($date,0,3)=='1er') { $d=1; $posM=3; } + elseif (is_numeric(substr($date,1,1))) { $d=substr($date,0,2); $posM=2; } + else { $d=substr($date,0,1); $posM=1; } + $M = substr($date, $posM, strlen($date)-4-$posM); + $m = self::getNumMois($M); + break; + case 'Ymd': + $d = substr($date,6,2); + $m = substr($date,4,2); + $Y = substr($date,0,4); + break; + case 'Y-m-d': + $d = substr($date,8,2); + $m = substr($date,5,2); + $Y = substr($date,0,4); + break; + case 'd/m/Y': + $d = substr($date,0,2); + $m = substr($date,3,2); + $Y = substr($date,6,4); + break; + default: return $date; + } + + if ($m*1>0 && $m*1<10) $m='0'.($m*1); + if ($d*1>0 && $d*1<10) $d='0'.($d*1); + + switch ($formatOUT) + { + case 'd/m/Y': return $d.'/'.$m.'/'.$Y; break; + case 'm/Y': return $m.'/'.$Y; break; + //case 'M Y': return $this->tabMoisEnLettres[$m].' '.$Y; break; + case 'Y': return $Y; break; + case 'm': return $m; break; + case 'd': return $d; break; + case 'Ym': return $Y.$m; break; + case 'Ymd': return $Y.$m.$d; break; + case 'Y-m-d': return $Y.'-'.$m.'-'.$d; break; + case 'Y/m/d': return $Y.'/'.$m.'/'.$d; break; + default: return $date; + } + } + + /** Calcul de la date après application de la période textuelle (deux ans, six mois, quinze jours, etc...) + * @todo Fonction ne fonctionnant qu'avec un chiffre en un seul mot du genre dix mais pas quatre vingt dix !!! + * @param date $dateIN au format Ymd + * @param string $period (ex : cinq mois, six ans, un jour) + * @return date + */ + function period2Days($dateIN, $period) { + $dateV=self::dateT('Ymd', 'Ymd', $dateIN); + if ($dateV<>$dateIN) return NULL; + $d=substr($dateIN,6,2); + $m=substr($dateIN,4,2); + $Y=substr($dateIN,0,4); + $period=trim(strtr($period, "-.,", ' ')); + if ($period=='') return NULL; + $tabP=explode(' ', $period); + $chiffre=WChiffes::ChiffresEnLettres($tabP[0]); + switch (end($tabP)) { + case 'mois': $dateOUT=date('Ymd', mktime(0, 0, 0, $m+$chiffre, $d, $Y)); break; + case 'an': + case 'ans': $dateOUT=date('Ymd', mktime(0, 0, 0, $m, $d, $Y+$chiffre)); break; + case 'jour': + case 'jours': $dateOUT=date('Ymd', mktime(0, 0, 0, $m, $d+$chiffre, $Y)); break; + default: $dateOUT=NULL; + } + return $dateOUT; + } +} + +?> \ No newline at end of file