CodexBloom - AI-Powered Q&A Platform

PHP 8.1: Unexpected Behavior When Using `IntlDateFormatter` for Time Zone Conversion

👀 Views: 2 💬 Answers: 1 📅 Created: 2025-06-06
php datetime intl

I'm encountering an issue with the `IntlDateFormatter` while trying to convert dates between different time zones in PHP 8.1. Specifically, when I attempt to create a date in one time zone and convert it to another, the results are not what I expect. For instance, I have the following code: ```php $dateString = '2023-10-01 12:00:00'; $sourceTimezone = new DateTimeZone('America/New_York'); $targetTimezone = new DateTimeZone('Europe/London'); $date = DateTime::createFromFormat('Y-m-d H:i:s', $dateString, $sourceTimezone); $formatter = new IntlDateFormatter( 'en_GB', IntlDateFormatter::SHORT, IntlDateFormatter::NONE, 'Europe/London', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd HH:mm:ss' ); $formattedDate = $formatter->format($date); echo $formattedDate; ``` The output I get is `2023-10-01 12:00:00`, which is the same as the input date in New York's time zone, rather than the expected conversion to London time which should account for the time zone difference. I've confirmed that the input date is indeed in the New York timezone, and it should be 5 hours behind London during this time of year. I also tried using the `DateTime` methods directly for conversion, like so: ```php $date->setTimezone($targetTimezone); echo $date->format('Y-m-d H:i:s'); ``` This returns the correct London time: `2023-10-01 17:00:00`, but I need it formatted consistently using `IntlDateFormatter` for localization. Is there a way to use `IntlDateFormatter` correctly for this time zone conversion? Am I missing something in the configuration or usage of the `IntlDateFormatter`? Any insights would be greatly appreciated.