I wonder if your timezone settings are not correct. I had a similar problem recently, and it was caused by the Daylight Saving Time not being applied correctly. I imagine that if the server does not know where it is, then it cannot know when DST starts and ends.
To find out of if this applies to you, try echo ini_get('date.timezone');
in a script - what do you get? Be sure to do this either in a web context if your problem is in a web script, or on the console if your problem is on the console. This is because the PHP settings to control this are often set separately.
If you find that your setting does not give the correct city that you'd normally specify for your TZ, then change it in your php.ini
file. For example, for me, I use this:
date.timezone = Europe/London