Bonjour à tous,

Je me lance dans ma première contribution : la possibilité d'agir sur des dates au format Sql (DATE, DATETIME, TIME, TIMESTAMP) avec la classe DateTime de PHP5.

J'ai créé 4 classes filles de DateTime (une pour chaque type SQL) qui permettent la modification et la comparaison de dates, et qui gèrent également les valeurs nulles SQL (exemple 0000-00-00 00:00:00 qui n'est pas nativement reconnue par la classe DateTime).

Les 4 classes ont des méthodes communes regroupées dans un Trait (compatibilité PHP 5.4 donc, mais aussi compatible PHP > 5.2 en copiant/collant dans chaque classe les méthodes du trait).
Edit : ce n'est plus le cas, une classe abstraite a été utilisée à la place.

Exemple d'utilisation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$MaDate =   new SqlDateTime('2012-01-03 13:42:05'); 
var_dump((string) $MaDate); // '2012-01-03 13:42:05'
 
$MaDate ->  Modify('- 3 days'); 
var_dump((string) $MaDate); // '2011-12-31 13:42:05'
 
$MaDate ->  Modify('0000-00-00 00:00:00');  
var_dump((string) $MaDate); // '0000-00-00 00:00:00'
 
$MaDate ->  Modify('- 3 days'); 
var_dump((string) $MaDate); // '0000-00-00 00:00:00'
 
$MaDate ->  Modify('2013-02-06 13:50:55');  
var_dump((string) $MaDate); // '2013-02-06 13:50:55'
 
$MaDate ->  Modify('+ 2 hours 3 min -2 sec');   
var_dump((string) $MaDate); // '2013-02-06 15:53:53'
J'ai ajouté dans le trait une méthode __toString permettant de retourner l'objet en chaîne Sql, exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$MaDate = new SqlDate('now'); // SqlDate correspond au type Sql "Date" : YYYY-MM-DD
$MaDate -> Modify('-1 day');
$MesDates = Array($Madate) // $MesDates[0] vaut (string) '2012-03-06'
Tout le détail est ici :
http://www.couscousboulette.com/2013...bjet-datetime/

Il vous suffit de choper le code source, et d'utiliser les classes SqlDateTime, SqlDate, SqlTime et SqlTimeStamp à la place de DateTime quand vous travaillez avec des données venant de MySql.

Enjoy
Ben