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>';
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