summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@php.net>1999-06-15 12:31:29 +0000
committerRasmus Lerdorf <rasmus@php.net>1999-06-15 12:31:29 +0000
commitbdbdaa4369bf21c3e7cccdfddfac4b5308af7518 (patch)
treee12bc25519ad8580511032417956d2759c560fad
parent215a88ade1aee74546ccb893dc6bd6e87d237bed (diff)
downloadphp-git-bdbdaa4369bf21c3e7cccdfddfac4b5308af7518.tar.gz
gmmktime() fix
-rw-r--r--ext/standard/datetime.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index 82ea84bc65..1a0cfeca77 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -96,13 +96,6 @@ void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
tzset();
#endif
tn = localtime(&t);
- if (gm) {
-#if HAVE_TM_GMTOFF
- gmadjust=(tn->tm_gmtoff)/3600;
-#else
- gmadjust=timezone/3600;
-#endif
- }
memcpy(&ta,tn,sizeof(struct tm));
ta.tm_isdst = -1;
@@ -123,10 +116,22 @@ void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
ta.tm_min = arguments[1]->value.lval;
/* fall-through */
case 1:
- ta.tm_hour = arguments[0]->value.lval - gmadjust;
+ ta.tm_hour = arguments[0]->value.lval;
case 0:
break;
}
+ t=mktime(&ta); /* Need to do this because of Daylight savings */
+ tn = localtime(&t);
+
+ if (gm) {
+#if HAVE_TM_GMTOFF
+ gmadjust=(tn->tm_gmtoff)/3600;
+#else
+ gmadjust=timezone/3600;
+#endif
+ }
+
+ ta.tm_hour+=gmadjust;
return_value->value.lval = mktime(&ta);
return_value->type = IS_LONG;
}