PHP 4.0 Bug #9878: gmmktime is 1 hour off during standard time
| From: | bfoddy at mn dot mediaone dot net | Date: | Tue, 20 Mar 2001 19:08:09 +0000 |
| Subject: | PHP 4.0 Bug #9878: gmmktime is 1 hour off during standard time | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-49543@lists.php.net to get a copy of this message | ||
From: bfoddy@mn.mediaone.net
Operating system: Solaris 2.6
PHP version: 4.0.4pl1
PHP Bug Type: Date/time related
Bug description: gmmktime is 1 hour off during standard time
gmmktime is producing a timestamp 1 hour off when the timezone is standard time. If you compare a
time() with gmmktime with current settings and a is_dst
value NULL, the results will be one hour off.
I used the following little script to prove this:
<?
print ("<PRE>");
print ("Time function = ".time ());
print ("\n");
print ("gmmktime = ".gmmktime (18,25,0,3,20,2001));
print ("\n");
print ("mktime = ".mktime(12,25,0,3,20,2001));
print ("\n");
print (gmmktime(7,0,0,4,1,2001)." ".mktime(1,0,0,4,1,2001)."\n");
print (gmmktime(8,0,0,4,1,2001)." ".mktime(3,0,0,4,1,2001)."\n");
?>
Currently, the US/Central timezone is -6 hours from GMT.
I believe the problem is in ext/standard/datetime.c, line
186. Judging from the code, "timezone" seems to be a negative seconds value from GMT,
probably of the standard timezone (TZ in standard). So if is_dst == 0, you don't want to add
anything more. I think the like should say:
gmadjust = -(is_dst ? timezone - 3600 : timezone );
And the comment about overcorrecting removed.
My test script works if this line is changed.
--
Edit Bug report at: http://bugs.php.net/?id=9878&edit=1