From:             [EMAIL PROTECTED]
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



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to