Ici, j'utilise cette fonction pour convertir datetime dans un autre fuseau horaire. Pour un meilleur résultat si vous convertissez votre datetime en utc fuseau horaire et ensuite convertir en fuseau horaire requis, alors il est meilleur résultat.
function ConvertTimezoneToAnotherTimezone($time, $currentTimezone, $timezoneRequired) {
$dayLightFlag = false;
$dayLgtSecCurrent = $dayLgtSecReq = 0;
$system_timezone = date_default_timezone_get();
$local_timezone = $currentTimezone;
date_default_timezone_set($local_timezone);
$local = date("Y-m-d H:i:s");
/* Uncomment if daylight is required */
// $daylight_flag = date("I", strtotime($time));
// if ($daylight_flag == 1) {
// $dayLightFlag = true;
// $dayLgtSecCurrent = -3600;
// }
date_default_timezone_set("GMT");
$gmt = date("Y-m-d H:i:s ");
$require_timezone = $timezoneRequired;
date_default_timezone_set($require_timezone);
$required = date("Y-m-d H:i:s ");
/* Uncomment if daylight is required */
// $daylight_flag = date("I", strtotime($time));
// if ($daylight_flag == 1) {
// $dayLightFlag = true;
// $dayLgtSecReq = +3600;
// }
date_default_timezone_set($system_timezone);
$diff1 = (strtotime($gmt) - strtotime($local));
$diff2 = (strtotime($required) - strtotime($gmt));
$date = new DateTime($time);
$date->modify("+$diff1 seconds");
$date->modify("+$diff2 seconds");
if ($dayLightFlag) {
$final_diff = $dayLgtSecCurrent + $dayLgtSecReq;
$date->modify("$final_diff seconds");
}
$timestamp = $date->format("Y-m-d H:i:s ");
return $timestamp;
}
Merci.
me damer le pion, la suppression de la mienne. Il est à noter que DateTime est disponible depuis PHP 5.2 - il y a un patch pour 5.1 mais c'est expérimental –
Yep. datetime est plutôt "nouveau". Même en 5.2 il ne contient pas toutes les fonctions qui sont nécessaires, voulues et mentionnées dans le manuel – ITroubs
Bonne réponse. Ces fonctions prennent automatiquement en charge l'heure d'été, où le simple ajout d'un décalage est maladroit et imprécis. –