Attached is a simply C++ file demonstrating this problem, i suspect that its to do with the fact that the US starts DST at 2am and EU at 1am as for the whole hour 1am - 2am UTC the value of is_dst is 0, i reported this bug to Microsoft today.

I've also attached the patch which makes the time for performing mktime to 2:01:01 instead of 01:01:01 and this corrects the issue.

Thanks,
Scott

Scott Macvicar wrote:
Hi,

I think this is a bug from the depths of Redmond since it takes an hour off ta->tm_hour but doesn't set ta->tm_isdst, its fairly significant and can be fixed with a small change.

If someone with karma could apply the patch in http://bugs.php.net/bug.php?id=27533

Patch basically forces it to make the hour 02:01:01 instead of 01:01:01 which resolves the isssue.

Thanks,
Scott

#include <time.h>
#include <stdio.h>

void main(void)
{
        struct tm *ta;
        time_t t;

        tzset();

        t = time(NULL);
        ta = localtime(&t);

        // let mktime find dst
        ta->tm_isdst = -1;
        // year
        ta->tm_year = 104;
        // month day
        ta->tm_mday = 28;
        // week day
        ta->tm_wday = 0;
        // month
        ta->tm_mon = 2;
        // second
        ta->tm_sec = 1;
        //month
        ta->tm_min = 1;
        // hour
        ta->tm_hour = 1;

        printf("Time Before: %s\n", asctime(ta));
        t = mktime(ta);

        printf("Time After: %s\n", asctime(ta));
        printf("Is dst: %i\n", ta->tm_isdst);
}
--- ext/standard/datetime.c     2004-03-09 02:19:32.000000000 +0000
+++ ext/standard/datetime.c.patched     2004-03-09 02:20:48.000000000 +0000
@@ -192,8 +192,8 @@
                /* fall-through */ 
        case 1: /* hour */
                val = (*arguments[0])->value.lval; 
-               if (val < 1) { 
-                       chgsecs += (1-val) * 60*60; val = 1; 
+               if (val < 2) { 
+                       chgsecs += (2-val) * 60*60; val = 2; 
                } 
                ta->tm_hour = val; 
                /* fall-through */ 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to