144 lines
4.8 KiB
PHP
144 lines
4.8 KiB
PHP
|
<?
|
||
|
|
||
|
include_once('chiffres.php');
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Classe de gestion des méthodes relatives à la date et à l'heure
|
||
|
*
|
||
|
* <p>détail de la classe</p>
|
||
|
*
|
||
|
* @name nom de la classe
|
||
|
* @author Nom de l'auteur <adresse@Email.dom>
|
||
|
* @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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|