Changer de fuseau horaire avec Zend_Date

Logo Zend Framework

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";?>

Commentaires

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.

@+

Ajouter un commentaire