Aujourd'hui, j'ai eu besoin de convertir une date exprimée dans le fuseau horaire PST/PDT (Pacific Summer Time/Pacific Daylight Time) au fuseau horaire de Paris. Avec Zend_Date, il suffit de définir le fuseau horaire source avant de régler la date, puis de repasser dans le fuseau horaire désiré :
<?php
$date = new Zend_Date();
// On règle le fuseau horaire à America/Los_Angeles car PST/PDT n'est pas un format standard
$date->setTimezone('America/Los_Angeles');
// On définit une constante pour le format DATETIME de MySQL
define('MYSQL_DATETIME', 'yyyy-MM-dd HH:mm:ss');
// On charge la date au format DATETIME de MySQL dans l'objet Zend_Date
$date->set('2009-07-20 00:00:00', MYSQL_DATETIME);
// On repasse la date dans le fuseau horaire par défaut
// défini dans php.ini (Europe/Paris dans mon cas)
$date->setTimezone(null);
// Affiche Europe/Paris
echo $date->getTimezone() . "\n";
// Affiche 2009-07-20 09:00:00
// 7h de décalage/UTC pour PST/PDT + 2h de décalage/UTC pour Europe/Paris,
// on obtient bien 9h
echo $date->toString(MYSQL_DATETIME) . "\n";?>
Comments
karl3i (not verified)
Mon, 30/11/2009 - 15:23
Permalink
Bonjour, merci pour cet
Bonjour,
merci pour cet extrait de code.
2 petites remarques en passant :
(1) 'YYYY-MM-dd HH:mm:ss' => la casse a son importance, par exemple 'yyyy-MM-dd hh:mm:ss' rend les heures de 0 à 12.
(2) Dans une classe, on préférera définir MYSQL_DATETIME en tant que constante de classe et pas en tant que define.
@+
Add new comment