datetime status

From: Date: Mon, 21 Nov 2011 01:41:17 +0000
Subject: datetime status
Groups: php.internals 
Request: Send a blank email to internals+get-56444@lists.php.net to get a copy of this message
Hi! We're in RC now, and I'm very concerned about the status of DateTime functionality (see bugs 60236, 60237 and XFAILs) - I've reported these problems in June, but not much happened since then. I'm trying to figure out what's going on there, but I'm not sure if I understand the code correctly and if the fix is right. So far this is what I got: When parsing string "2010-11-06 18:38:28 EDT" with timelib_strtotime, I get back the correct datetime elements, and these for timezone: z = 300, tz_abbr = 0x2633670 "EDT", tz_info = 0x0, dst = 1, And from this and the code in do_adjust_timezone() I gather that "z" is supposed to be combined with "dst" when calculating timezone offsets. But timelib_unixtime2local() uses only "z" and ignores "dst" completely. So which one "z" is supposed to be? If it is the former, the patch seems to be pretty simple: --- lib/unixtime2tm.c (revision 319533) +++ lib/unixtime2tm.c (working copy) @@ -146,7 +146,7 @@ int z = tm->z; signed int dst = tm->dst; - timelib_unixtime2gmt(tm, tm->sse - (tm->z * 60)); + timelib_unixtime2gmt(tm, tm->sse - (tm->z * 60) + tm->dst*3600); tm->z = z; tm->dst = dst; @@ -184,7 +184,7 @@ int z = tm->z; signed int dst = tm->dst; - timelib_unixtime2gmt(tm, ts - (tm->z * 60)); + timelib_unixtime2gmt(tm, (ts - (tm->z * 60) + tm->dst*3600)); tm->z = z; tm->dst = dst; It does not add any test breakage and fixes two XFAILs. Also, I see that sse value is not assigned here, though later the code goes: /* we need to reset the sse here as unixtime2gmt modifies it */ tm->sse = ts; Do we need to update sse in this branch too? -- Stanislav Malyshev, Software Architect SugarCRM: http://www.sugarcrm.com/ (408)454-6900 ext. 227

« previous php.internals (#56444) next »