Reputation: 2838
Whit this code:
$epoch= '1609455600';
$date = new DateTime( '@'.$epoch);
echo $date-> format( 'Y-m-d');
I see this result 2020-12-31
. The server timezone is reported as Europe/Zurich (with date_default_timezone_get
). But in this time zone that date should be 2021-1-1.
What is going on here?
Upvotes: 0
Views: 621
Reputation: 7703
In addition to the comment from @tuckbros. The output with var_export shows that the DateTime object has the time zone 00:00 (UTC).
date_default_timezone_set('Europe/Zurich');
$epoch= '1609455600';
$date = new DateTime( '@'.$epoch);
var_export($date);
/*
DateTime::__set_state(array(
'date' => '2020-12-31 23:00:00.000000',
'timezone_type' => 1,
'timezone' => '+00:00',
))
*/
The clean way to get the local time is to transfer the object to the desired time zone (and not to add any offset times).
$date->setTimeZone(new DateTimeZone(date_default_timezone_get()));
var_export($date);
/*
DateTime::__set_state(array(
'date' => '2021-01-01 00:00:00.000000',
'timezone_type' => 3,
'timezone' => 'Europe/Zurich',
))
*/
You can now continue to work with the DateTime object, since it has the correct time zone in addition to the correct local time.
Upvotes: 1