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 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|