I'm trying to troubleshoot and solve this problem: the server I'm working on (php 5.2.9 on Linux), has the correct local time (America/Buenos_Aires):

user@server [/home/site/public_html]$ date
Mon Nov  1 17:11:14 ART 2010

php.ini is set with date.timezone = "America/Buenos_Aires" I also tried to set the timezone directly in the script with

ini_set('display_errors', true);

//echo  date_default_timezone_get(), "<br>";
echo "ini: ", ini_get('date.timezone'), "<br>";

$now = date("H:i:s T I");
$nowdate = date("Y-m-d");
echo $nowdate." ".$now;

but to no avail, the result is

ini: America/Buenos_Aires
2010-11-01 18:11:14 ARST 1

when it should read 17:11 (It's consistently one hour ahead). All I've found here and on the web pointed to

  • date_default_timezone_set (which I tried)
  • setting date.timezone in php.ini (which it is set)
  • confusing server time with client time (which I'm not).

Any ideas?

EDIT: As suggested, I checked and as you can see in the code, PHP thinks it should be applying DST, and Argentina decided to not apply it this year. Any option besides waiting for a patch?

EDIT 2: I tried dumping the timezones transition as suggested. I got the following:

The timezone America/Buenos_Aires switches to standard time on 20 Mar 2011 @ 02:00.
The new GMT offset will be: -10800 (ART) 


Also check for daylight savings time settings.

Written by zneak

thanks, PHP is indeed using DST. I'll update the question.

(tipp) using error_reporting(-1); will show every possible error, even when new levels and constants are added in future PHP versions.

Written by Gordon

@Gordon: thanks, I know. I like being explicit about the error reporting levels.

Accepted Answer

There was a question a few days back that suggested that PHP hasn't yet got wind of the fact that Argentina got rid of DST only this year. It seems like this decision hasn't made it into the code base yet. (But it was not confirmed, so it's not 100% clear whether this was it.)

Maybe try dumping your time zones the same way to see whether that applies to your PHP version, too.

Update: This indeed seems to be the problem. The best solution I can think of is to use an offset in the time zone, e.g. Etc/GMT-3

Somebody should file a bug with bugs.php.net, there doesn't seem to be one for this.

Written by Pekka
This page was build to provide you fast access to the question and the direct accepted answer.
The content is written by members of the stackoverflow.com community.
It is licensed under cc-wiki