web-dev-qa-db-fra.com

Fuseau horaire incorrect dans la sortie formatée avec JDate

Je suis en mesure d’obtenir le "moment" approprié, mais je ne peux PAS afficher le fuseau horaire correct dans la date formatée qui est transmise à l’utilisateur.

J'ai essayé de trouver ce que je pouvais trouver en ligne et dans la documentation, mais je n'arrive pas à obtenir cette partie de la sortie correctement. Est-ce qu'il me manque quelque chose de fondamental ou s'agit-il d'un bogue de JDate?

Ma sortie

Source Date:  2000-01-01 00:00:00 (stored in DB as UTC)
Expected Output:  1999-12-31 19:00 EST, using format "Y-m-d H:i T"

Joomla Timezone:  DateTimeZone Object
(
    [timezone_type] => 3
    [timezone] => UTC
)

User Timezone:  America/New_York
User DateTimeZone Object
(
    [timezone_type] => 3
    [timezone] => America/New_York
)

1. 2000-01-01 05:00 GMT
2. 2000-01-01 05:00 GMT    

Mon code

$thedate = '2000-01-01 00:00:00';
echo '<pre>Source Date:  '.print_r($thedate,true).' (stored in DB as UTC)'."\n";
echo 'Expected Output:  2000-01-01 05:00 EST, using format "Y-m-d H:i T"</pre>';

// Joomla Timezone
$tz_joomla = new DateTimeZone(JFactory::getApplication()->get('offset'));
echo '<pre>Joomla Timezone:  '.print_r($tz_joomla,true).'</pre>';

// User Timezone
$user = JFactory::getUser();
$utzparm = $user->getParam('timezone', 'UTC');
$tz_user = new DateTimeZone($utzparm);
echo '<pre>User Timezone:  '.print_r($utzparm,true)."\n";
echo 'User '.print_r($tz_user,true).'</pre>';

// Output withOUT `->setTimezone`
$date = new JDate($thedate,$tz_user);
$output_date = $date->format('Y-m-d H:i T');
echo '<pre>1. '.print_r($output_date,true).'</pre>';

// Output WITH `->setTimezone`
$date = new JDate($thedate,$tz_user);
$date->setTimezone($tz_user);
$output_date = $date->format('Y-m-d H:i T');
echo '<pre>2. '.print_r($output_date,true).'</pre>';
5
GDP

La réponse réside apparemment en utilisant ->calendar() au lieu de ->format(), car cette méthode a un deuxième paramètre à formater localement. Le code ci-dessous me donne le fuseau horaire correctement dans la sortie:

$date = new JDate($thedate);
$date->setTimezone($tz_user);
$output_date = $date->calendar('Y-m-d H:i T', true );
echo $output_date';

> 1999-12-31 19:00 EST
3
GDP