Accueil > > > [PHP5] CLASSE DATE/HEURE
[PHP5] CLASSE DATE/HEURE
Information sur la source
Description
PHP5.2 étant sorti, je suis allé regarder la nouvelle classe de date/heure qui se trouve dans le core de PHP. Ma déception fut pour le moins assez grande pour m'appercevoir qu'on ne peut pratiquement rien faire de cette classe, car même en l'étendant on ne peut pas en faire vraiment grand chose. J'ai décidé de me (re)faire ma propre classe et voici donc ce que cela donne : - Une classe concrète qui va gérer la date et l'heure. - Une classe concrète qui ne va gérer que la date. - Une classe concrète qui ne va gérer que l'heure. Voyons comment cela peut se coder :
Source
- <?php
- interface iDateTime {
- public function ToLocalFormat($format=null);
- public function ToFormat($format=null);
- }
-
-
- /**
- * Classe gérant à la fois la date et l'heure
- *
- */
- class oDateTime implements iDateTime {
-
- /**
- * Contient la date/heure en cours.
- *
- * @var int
- */
- protected $value;
- /**
- * Garde en mémoire les différentes appels de méthodes ainsi que les résultats.
- *
- * @var array
- */
- protected $cache = array('timestamp' => NULL,
- 'datetime' => array() );
-
- public $defaultlocal;
- public $defaultdate;
- /**
- * Instanciation commune à toutes les classes filles.
- *
- * Si aucun timestamp n'est passé en paramètre, la date/heure prise en compte
- * sera défini via time().
- *
- * @param int[optional] $DateTime
- */
- public function __construct($DateTime=NULL) {
- $this->value = ( isset($DateTime) ) ? (int) $DateTime : time();
- $this->cache['timestamp'] = $this->value;
- $this->defaultlocal = '%d %B %Y %H %M %S';
- $this->defaultdate = 'd-m-Y h:i:s';
- }
- /**
- * Retourne une chaine de l'objet en cours.
- *
- * @return string
- */
- public function __ToString() { return (string) $this->value; }
- /**
- * Remet le cache à 0.
- *
- */
- final protected function _FlushCache() {
- unset($this->cache);
- $this->cache = array('timestamp' => NULL,
- 'datetime' => array() );
- }
- /**
- * Recharge le cache.
- *
- */
- protected function ReloadCache() {
- $this->_FlushCache();
- $this->cache['timestamp'] = $this->value;
- }
- /**
- * Modifie la date/heure.
- *
- * La modification de la date/heure peut se faire avec les expressions de strtotime().
- *
- * @param string $format
- * @param string $method 'plus' - 'minus'
- * @throws Exception
- */
- final public function Modify($format, $method) {
-
- if ( is_string($format) ) $format = strtotime($format);
- $method = strtolower($method);
- switch ( $method ) {
- case 'plus':
- $this->value += $format;
- break;
- case 'minus':
- $this->value -= $format;
- break;
- default:
- throw new Exception('...');
- }
-
- $this->ReloadCache();
-
- }
- /**
- * Créer un nouveau timestamp.
- *
- * @param int $h
- * @param int $min
- * @param int $s
- * @param int $mon
- * @param int $d
- * @param int $y
- */
- public function Set($h, $min, $s, $mon, $d, $y) {
- $this->value = mktime((int) $h, (int) $min, (int) $s, (int) $mon, (int) $d, (int) $y);
- $this->ReloadCache();
- }
- /**
- * Renvoit la date/heure à partir d'une chaine de formatage.
- *
- * @param string[optional] $format strftime()
- * @return string
- */
- public function ToLocalFormat($format=null) {
-
- if ( is_null($format) ) $format = $this->defaultlocal;
-
- if ( !isset($this->cache['date'][$format]) ) {
- $this->cache['date'][$format] = strftime($format, $this->value);
- }
- return $this->cache['date'][$format];
- }
- /**
- * Retourne la date/heure dans un format de type chaine.
- *
- * @param string[optional] $format date()
- * @return string
- */
- public function ToFormat($format=null) {
-
- if ( is_null($format) ) $format = $this->defaultdate;
-
- if ( !isset($this->cache['date'][$format]) ) {
- $this->cache['date'][$format] = date($format, $this->value);
- }
- return $this->cache['date'][$format];
- }
-
- }
-
- /**
- * Classe de date
- *
- * Etend la classe aDateTime pour une meilleur gestion de la date.
- *
- */
- class oDate extends aDateTime {
-
- /**
- * Initialise un nouveau timestamp type Date.
- *
- * @param int $year
- * @param int $month
- * @param int $day
- */
- public function Set($year, $month, $day) {
- parent::Set(0, 0, 0, $month, $day, $year);
- }
-
- /**
- * Nouvelle instance de type date.
- *
- * @param int $date
- */
- public function __construct($date=NULL) {
- parent::__construct($date);
- $this->defaultlocal = '%d %B %Y';
- $this->defaultdate = 'd-m-Y';
- }
-
- }
-
- /**
- * Classe d'heure
- *
- * Etend la classe aDatetime pour une meilleur gestion de l'heure.
- *
- */
- class oTime extends aDateTime {
-
- /**
- * Initialise un nouveau timestamp type Heure
- *
- * @param int $hour
- * @param int $min
- * @param int $sec
- */
- public function Set($hour, $min, $sec) {
- parent::Set($hour, $min, $sec, 0, 0, 0);
- }
-
- public function __construct($time=null) {
- parent::__construct($time);
- $this->defaultlocal = '%H %M %S';
- $this->defaultdate = 'h i s';
- }
- }
- ?>
<?php
interface iDateTime {
public function ToLocalFormat($format=null);
public function ToFormat($format=null);
}
/**
* Classe gérant à la fois la date et l'heure
*
*/
class oDateTime implements iDateTime {
/**
* Contient la date/heure en cours.
*
* @var int
*/
protected $value;
/**
* Garde en mémoire les différentes appels de méthodes ainsi que les résultats.
*
* @var array
*/
protected $cache = array('timestamp' => NULL,
'datetime' => array() );
public $defaultlocal;
public $defaultdate;
/**
* Instanciation commune à toutes les classes filles.
*
* Si aucun timestamp n'est passé en paramètre, la date/heure prise en compte
* sera défini via time().
*
* @param int[optional] $DateTime
*/
public function __construct($DateTime=NULL) {
$this->value = ( isset($DateTime) ) ? (int) $DateTime : time();
$this->cache['timestamp'] = $this->value;
$this->defaultlocal = '%d %B %Y %H %M %S';
$this->defaultdate = 'd-m-Y h:i:s';
}
/**
* Retourne une chaine de l'objet en cours.
*
* @return string
*/
public function __ToString() { return (string) $this->value; }
/**
* Remet le cache à 0.
*
*/
final protected function _FlushCache() {
unset($this->cache);
$this->cache = array('timestamp' => NULL,
'datetime' => array() );
}
/**
* Recharge le cache.
*
*/
protected function ReloadCache() {
$this->_FlushCache();
$this->cache['timestamp'] = $this->value;
}
/**
* Modifie la date/heure.
*
* La modification de la date/heure peut se faire avec les expressions de strtotime().
*
* @param string $format
* @param string $method 'plus' - 'minus'
* @throws Exception
*/
final public function Modify($format, $method) {
if ( is_string($format) ) $format = strtotime($format);
$method = strtolower($method);
switch ( $method ) {
case 'plus':
$this->value += $format;
break;
case 'minus':
$this->value -= $format;
break;
default:
throw new Exception('...');
}
$this->ReloadCache();
}
/**
* Créer un nouveau timestamp.
*
* @param int $h
* @param int $min
* @param int $s
* @param int $mon
* @param int $d
* @param int $y
*/
public function Set($h, $min, $s, $mon, $d, $y) {
$this->value = mktime((int) $h, (int) $min, (int) $s, (int) $mon, (int) $d, (int) $y);
$this->ReloadCache();
}
/**
* Renvoit la date/heure à partir d'une chaine de formatage.
*
* @param string[optional] $format strftime()
* @return string
*/
public function ToLocalFormat($format=null) {
if ( is_null($format) ) $format = $this->defaultlocal;
if ( !isset($this->cache['date'][$format]) ) {
$this->cache['date'][$format] = strftime($format, $this->value);
}
return $this->cache['date'][$format];
}
/**
* Retourne la date/heure dans un format de type chaine.
*
* @param string[optional] $format date()
* @return string
*/
public function ToFormat($format=null) {
if ( is_null($format) ) $format = $this->defaultdate;
if ( !isset($this->cache['date'][$format]) ) {
$this->cache['date'][$format] = date($format, $this->value);
}
return $this->cache['date'][$format];
}
}
/**
* Classe de date
*
* Etend la classe aDateTime pour une meilleur gestion de la date.
*
*/
class oDate extends aDateTime {
/**
* Initialise un nouveau timestamp type Date.
*
* @param int $year
* @param int $month
* @param int $day
*/
public function Set($year, $month, $day) {
parent::Set(0, 0, 0, $month, $day, $year);
}
/**
* Nouvelle instance de type date.
*
* @param int $date
*/
public function __construct($date=NULL) {
parent::__construct($date);
$this->defaultlocal = '%d %B %Y';
$this->defaultdate = 'd-m-Y';
}
}
/**
* Classe d'heure
*
* Etend la classe aDatetime pour une meilleur gestion de l'heure.
*
*/
class oTime extends aDateTime {
/**
* Initialise un nouveau timestamp type Heure
*
* @param int $hour
* @param int $min
* @param int $sec
*/
public function Set($hour, $min, $sec) {
parent::Set($hour, $min, $sec, 0, 0, 0);
}
public function __construct($time=null) {
parent::__construct($time);
$this->defaultlocal = '%H %M %S';
$this->defaultdate = 'h i s';
}
}
?>
Conclusion
Vous pouvez aussi faire des opérations avec les dates... bien que très sommaire pour le moment. J'ai fais les grandes lignes, à vous de me dire ce qu'il manque :)
Historique
- 17 janvier 2007 14:50:16 :
- J'ai changé ma classe abstraite en une classe concrète qui sait tout faire. La spécialisation vient des classes filles (ce qui est un comportement normal en objet ^^) et n'apporte aucun surplus de poids à la classe mère.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
php, sql et time() [ par armoun78 ]
voila mon probleme : pour écrire la date et l'heure actuelle dans ma base de données, je recupere l'heure et la date actuelle en php par l'intermédia
recuperer l'url de la page a partir d'une autre page [ par db2p ]
hellovoila j'ai une page php: index.phpen bas de cette page je mets un include genreinclude 'date_modif.php';le fichier 'date_modif.php' doit afficher
date & heure php [ par eax ]
salutjuste une petite question je voudrais faire une addition de 20 minutes sur un timestamp Y-m-d H:i:s comment faire?merci sylvain
PHP et MySQL : format de date [ par vir76 ]
Salut tout le monde,Voilà, dans MySQL, j'ai converti mon format DATE à l'aide de la fonction SELECT DATE_FORMAT(nom de mon champ, mon format)Le serveu
PHP et MySQL : format de date [ par vir76 ]
Bonjour,Je voudrais convertir le format de date de mySQL (aaaa-mm-jj) en format français (jj-mm-aa). J'ai essayé plusieurs fonctions présentes sur ce
date time [ par rigaudstar ]
Bonjour à tous, Alors voila j'ai programmé tant bien que mal des pages en php qui cherche leur info dans une base access. L'une de ces info est l'affi
Fonction php date [ par Niníel ]
Hello, est-ce qu'une fonction permet, à partir d'un numéro de semaine, de retrouver les dates correspondantes? je sais que l'on peut faire l'inverse,
Date probleme [ par g0belin ]
Ben voila en fait je veux faire un agenda...je veux afficher seulement les entree dans la base pour le jour courant...MAIS sa marche PASsa m'affiche t
Date du lendemain en PHP [ par kimengumi ]
Salut à tous,Je viens d'être confronté à un chtit problème, c'est d'afficher la date du lendemain en PHPVous allez me dire qu'il suffit de faire un da
Zapper la date ? [ par phpwankenobi ]
Bonjour,J'utilise la date courante dans des scripts PHP, afin de simuler des situations futures je souhaiterais changer celle-ci à une valeur de monch
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|