Zend_Date
permet de créer des instances d'elle même de
plusieurs manières différentes. Nous allons voir ceci.
La manière la plus simple de créer la date actuelle est d'utiliser le
constructeur new Zend_Date()
ou encore la méthode statique
Zend_Date::now()
. Toutes les deux retournent une instance de
Zend_Date
avec la date actuelle. Elle est représentée par une
date calendaire et un temps pour le fuseau horaire actuel du serveur.
Exemple 171. Créer une date par instance
Il n'y a pas de paramètres à passer au constructeur pour récupérer un objet
Zend_Date
. Certains paramètres sont cependant disponibles et
nous y reviendrons.
$date = new Zend_Date();
Exemple 172. Créer une date par méthode statique
La méthode statique now()
a exactement le même effet qu'un
passage par le constructeur. Cependant la méthode statique, elle, ne peut pas
prendre de paramètres additionnels.
$date = Zend_Date::now();
Les bases de données sont souvent utilisées pour stocker des informations de
dates. Mais elles ont toutes une implémentation et une représentation qui leur est
propre. MSSQL par exemple manipule les dates de manières significativement différente
de MySQL, par exemple. Heureusement, Zend_Date
aide à simplifier
le processus de création d'une date depuis une base de données.
Il est possible de demander au serveur de base de données de formater la date dans un certain format. Mais ceci reste en général assez lourd, et doit être pensé à chaque fois.
Nous avons donc des méthodes très pratiques et rapides dans
Zend_Date
, pour récupérer les dates depuis une base de
données.
Exemple 173. Création d'une date depuis une base de données
Toutes les bases de données doivent répondre extrêmement rapidement à leurs requêtes. Pour stocker une date de manière optimale dans une base, il faut utiliser un timestamp. En interne, tous les SGBDs représentent les dates sous forme de timestamp (non Unix). Ainsi, leur demander un timestamp sera toujours plus performant que de leur demander une date dans un format précis.
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table $date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
Exemple 174. Création d'une date depuis une base de données dans un format
La sortie de chaque base de données est différente même si elles se
ressemblent. Cependant elles ont toutes des formats compatibles ISO
.
La manière la plus simple de créer une date depuis une base de données est
d'utiliser Zend_Date::ISO_8601
. Les SGBDs connus pour être
conformes pour Zend_Date::ISO_8601
sont MySQL, MSSQL par
exemple, mais ils sont tous capables de retourner une représentation
ISO8601
d'une donnée date. ISO8601
possède l'avantage
d'être lisible et compréhensible par un humain. Son inconvénient est qu'il est
légèrement plus lourd à traiter qu'un simple timestamp UNIX. En revanche ceux-ci ne
supportent pas les dates inférieures au 1er Janvier 1970.
// SELECT datecolumn FROM my_table $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);
Créer une date depuis un tableau est fréquent et pratique. Les clés du tableau sont :
-
day : jour de la date, un nombre
-
month : mois de la date, un nombre
-
year : année complète de la date
-
hour : heures de la date
-
minute : minutes de la date
-
second : secondes de la date
Exemple 175. Créer une date depuis un tableau
En temps normal on utilisera un tableau avec toutes ses clés. Si une clé est
absente, la valeur qu'elle représente sera mise à la valeur zéro par défaut. Par
exemple une tableau ne comportant pas la clé "hour
", donnera naissance
à une date ayant une partie heures à la valeur "0".
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18, 'hour' => 12, 'minute' => 3, 'second' => 10); $date = new Zend_Date($datearray);
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18); $date = new Zend_Date($datearray);