So I have the following code:
$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime(date('r', 1440543600), $timezone);
echo $datetime->format('l, F j, Y - h:i A e');
This outputs the following:
Tuesday, August 25, 2015 - 11:00 PM +00:00
You would think it would output:
Tuesday, August 25, 2015 - 07:00 PM -04:00
How do I get format to output correctly with the set timezone?
Read the documentation for DateTime::__construct()
, where is says for 2nd parameter:
Note: The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
Based on that, set timezone on DateTime object after you have created it with unix timestamp:
$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime('@1440543600');
$datetime->setTimezone($timezone);
demo
I believe the issue isn't in how you are outputting your date but rather how you are inputting it. The 'r' format option includes time offset.
If you create your DateTime object with a string that is devoid of an offset you will get the expected results.
$timezone = new DateTimeZone('America/New_York');
$datetime = new DateTime("2015-08-20 01:24", $timezone);
echo $datetime->format('l, F j, Y - h:i A e');
$datetime->setTimezone(new DateTimeZone('America/Chicago'));
echo "\n";
echo $datetime->format('l, F j, Y - h:i A e');
/* outputs
Thursday, August 20, 2015 - 01:24 AM America/New_York
Thursday, August 20, 2015 - 12:24 AM America/Chicago
*/
See here for an example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With