I’ve been struggling quite a while with PHP’s DateTime classes. My understanding is that a UNIX-timstamp is always in UTC, regardless of the timezone.
That’s why I am quite confused with this code sample.
$date1 = new DateTime("@1351382400"); // Sun Oct 28 2012 02:00:00 GMT+2 (DST)
var_dump($date1->getTimestamp()); //prints: 1351382400
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"););
var_dump($date1->getTimestamp()); //prints: 1351386000
As you can see setTimezone() changes the result of getTimestamp().
Is it expected that setTimezone() affects getTimestamp()?
The amount that you’re off is 3600 seconds, or 1 hour.
I think that what you’re seeing is because the date you picked is the end of Daylight Savings Time in Stockholm. If you use a different date, you don’t get that effect:
Output:
I’m not sure if this is a bug or not, but it doesn’t happen if you don’t pick a date on which DST is changing.