Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php date() one hour ahead of server time (DST problem)

Tags:

date

php

time

dst

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

<?php
ini_set('display_errors', true);
error_reporting(E_ALL|E_STRICT|E_NOTICE);

//date_default_timezone_set("America/Buenos_Aires"); 
//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) 
like image 638
Adriano Varoli Piazza Avatar asked Dec 29 '22 05:12

Adriano Varoli Piazza


1 Answers

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.

like image 67
Pekka Avatar answered Jan 14 '23 01:01

Pekka