Bug #9878 Updated: gmmktime is 1 hour off during standard time
| From: | rasmus@php.net | Date: | Sat, 05 May 2001 19:40:27 +0000 |
| Subject: | Bug #9878 Updated: gmmktime is 1 hour off during standard time | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-54029@lists.php.net to get a copy of this message | ||
ID: 9878
Updated by: rasmus
Reported By: bfoddy@mn.mediaone.net
Old-Status: Open
Status: Analyzed
Bug Type: Date/time related
PHP Version: 4.0.4pl1
Assigned To:
Comments:
Are you sure that bit of code applies in your case? ie. is HAVE_TM_GMTOFF undefined in your
main/php_config.h file? I am unable to recreate this problem here, but on my Linux box my gmadjust
value comes straight from the libc system call ie. I have HAVE_TM_GMTOFF defined.
Previous Comments:
---------------------------------------------------------------------------
[2001-03-30 10:13:58] bfoddy@mn.mediaone.net
I know there are a lot of open bugs and this one is probably pretty small compared to most, but the
time window to
easily verify this bug and my suggested fix is quickly going
away for 6 months. With the time shift this weekend, it
wil be much more difficult to reproduce this bug, unless you
start subtracting 86400 seconds per day to get back into standard time.
If someone could just look at what I've provided I think
it will be a no-brainer. Even if it doesn't get tagged into
the new release, at least it will saved for the next.
Thanks
---------------------------------------------------------------------------
[2001-03-20 14:08:09] bfoddy@mn.mediaone.net
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.
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=9878&edit=2