Comment puis-je convertir une date comme celle-ci: 2012-07-16 01:00:00 +00
(elle est dans le fuseau horaire UTC +00:00
) en fuseau horaire UTC +04:00
? S'assurer que l'heure d'été sera manipulée correctement?
Utilisez DateTime
et DateTimeZone
.
$date = new DateTime('2012-07-16 01:00:00 +00');
$date->setTimezone(new DateTimeZone('Europe/Moscow')); // +04
echo $date->format('Y-m-d H:i:s'); // 2012-07-15 05:00:00
Pour vous aider avec la solution, vous devez obtenir la dernière partie de la chaîne (la partie offset) et la comparer à une simple recherche. vous pouvez utiliser un regex ou substr()
(peut-être) pour obtenir la partie la plus distante. Ensuite, lorsque vous avez une valeur + ou -, utilisez un maximum de 24 recherches sur des fuseaux horaires possibles, que vous pouvez utiliser avec les/possibles fuseaux horaires - de PHP - si le décalage est le même, qui se soucie du pays/de la localisation réelle?
Utilisez date_default_timezone_set pour appliquer le bon.