Bug #9878 Updated: gmmktime is 1 hour off during standard time

From: Date: Fri, 13 Jul 2001 14:50:07 +0000
Subject: Bug #9878 Updated: gmmktime is 1 hour off during standard time
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-59967@lists.php.net to get a copy of this message
ID: 9878 User updated by: bfoddy@mn.mediaone.net Reported By: bfoddy@mn.mediaone.net Status: Open Bug Type: Date/time related Operating System: Solaris 2.6 PHP Version: 4.0.4pl1 New Comment: Can we try to get this patch in 4.0.7? Its not as critical an issue during the summer, but the standard time will be here before you know it. Previous Comments: ------------------------------------------------------------------------ [2001-05-07 14:10:13] bfoddy@mn.mediaone.net Sorry, I replied to the email, but it didn't get logged to the record. Yes I'm sure Solaris2.6 does not have the tm_gmtoff value in tm struct. Linux does, perhaps newer Solaris do also, I don't know. But definately 2.6 does not have the value so the config does not set the HAVE_TM_GMTOF defined. I supposed to test on Linux you could rebuild php and override this define. If its any help, we are using the patch I suggested on a production Solaris server and it worked fine on both sides of the time shift in April. ------------------------------------------------------------------------ [2001-05-07 12:52:14] derick@php.net Waiting for feedback on Rasmus' question. ------------------------------------------------------------------------ [2001-05-05 15:40:26] rasmus@php.net 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. ------------------------------------------------------------------------ [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. ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=9878&edit=1

« previous php.dev (#59967) next »