ID: 30096 Updated by: [EMAIL PROTECTED] Reported By: schmidt_florian at f-24 dot com -Status: Assigned +Status: Closed Bug Type: Date/time related Operating System: * PHP Version: 5.*, 4.* Assigned To: derick New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2005-04-05 18:52:46] fabian-php at spline dot de Crap! I posted a wrong version, where the dst parameter of the gmmktime call was set to 0 (which shouldn't make a difference according to the documenation by the way) To get the output a was talking about one has to remove the 7th parameter from the gmmktime call. ====================OUTPUT================= no dst --> dst gmmktime(1,0,0,3,27,2005): 1111885200 | gmdate('r',1111885200):Sun, 27 Mar 2005 01:00:00 +0000 gmmktime(2,0,0,3,27,2005): 1111892400 | gmdate('r',1111892400):Sun, 27 Mar 2005 03:00:00 +0000 | Diff: 7200 gmmktime(3,0,0,3,27,2005): 1111892400 | gmdate('r',1111892400):Sun, 27 Mar 2005 03:00:00 +0000 | Diff: 0 gmmktime(4,0,0,3,27,2005): 1111896000 | gmdate('r',1111896000):Sun, 27 Mar 2005 04:00:00 +0000 | Diff: 3600 dst --> no dst gmmktime(1,0,0,10,30,2005): 1130634000 | gmdate('r',1130634000):Sun, 30 Oct 2005 01:00:00 +0000 gmmktime(2,0,0,10,30,2005): 1130637600 | gmdate('r',1130637600):Sun, 30 Oct 2005 02:00:00 +0000 | Diff: 3600 gmmktime(3,0,0,10,30,2005): 1130641200 | gmdate('r',1130641200):Sun, 30 Oct 2005 03:00:00 +0000 | Diff: 3600 gmmktime(4,0,0,10,30,2005): 1130644800 | gmdate('r',1130644800):Sun, 30 Oct 2005 04:00:00 +0000 | Diff: 3600 ------------------------------------------------------------------------ [2005-04-05 18:46:47] fabian-php at spline dot de I can reproduce this for debian testing (php 4.3.10) and for gentoo (php 4.3.10). The problem apears only the day when switching from dst to no dst. On that day all input that is between 02:00:00-02:59:59 ist mapped to a timestamp which is 3600 seconds later (03:00:00-03:50:59). Here is my script to reproduce the behavoir: <?php echo "no dst --> dst<br>"; $ts=-1; gm_date_check(01,00,00,03,27,2005); gm_date_check(02,00,00,03,27,2005); gm_date_check(03,00,00,03,27,2005); gm_date_check(04,00,00,03,27,2005); echo "<p>"; echo "dst --> no dst<br>"; $ts=-1; gm_date_check(01,00,00,10,30,2005); gm_date_check(02,00,00,10,30,2005); gm_date_check(03,00,00,10,30,2005); gm_date_check(04,00,00,10,30,2005); function gm_date_check($hour,$minute,$second,$month,$day,$year) { global $ts,$tsold; echo "gmmktime($hour,$minute,$second,$month,$day,$year): " ; $tsold = $ts; $ts = gmmktime($hour,$minute,$second,$month,$day,$year,0) ; echo $ts ." | gmdate('r',$ts):".gmdate('r',$ts); if ($tsold>0) echo " | Diff: " . ($ts - $tsold); echo "<br>"; } ?> ==================OUTPUT============================== no dst --> dst gmmktime(0,0,0,3,27,2005): 1111885200 | gmdate('r',1111885200):Sun, 27 Mar 2005 01:00:00 +0000 gmmktime(1,0,0,3,27,2005): 1111888800 | gmdate('r',1111888800):Sun, 27 Mar 2005 02:00:00 +0000 | Diff: 3600 gmmktime(2,0,0,3,27,2005): 1111892400 | gmdate('r',1111892400):Sun, 27 Mar 2005 03:00:00 +0000 | Diff: 3600 gmmktime(3,0,0,3,27,2005): 1111896000 | gmdate('r',1111896000):Sun, 27 Mar 2005 04:00:00 +0000 | Diff: 3600 gmmktime(4,0,0,3,27,2005): 1111899600 | gmdate('r',1111899600):Sun, 27 Mar 2005 05:00:00 +0000 | Diff: 3600 dst --> no dst gmmktime(0,0,0,10,30,2005): 1130630400 | gmdate('r',1130630400):Sun, 30 Oct 2005 00:00:00 +0000 gmmktime(1,0,0,10,30,2005): 1130634000 | gmdate('r',1130634000):Sun, 30 Oct 2005 01:00:00 +0000 | Diff: 3600 gmmktime(2,0,0,10,30,2005): 1130637600 | gmdate('r',1130637600):Sun, 30 Oct 2005 02:00:00 +0000 | Diff: 3600 gmmktime(3,0,0,10,30,2005): 1130641200 | gmdate('r',1130641200):Sun, 30 Oct 2005 03:00:00 +0000 | Diff: 3600 gmmktime(4,0,0,10,30,2005): 1130644800 | gmdate('r',1130644800):Sun, 30 Oct 2005 04:00:00 +0000 | Diff: 3600 ------------------------------------------------------------------------ [2005-04-04 15:48:07] gottwald at quantum-hydrometrie dot de This is still broken for 4.3.10. gmmktime() is correct when changing from DST to non-DST, but incorrect when changing from non-DST to DST: gmmktime(02, 00, 00, 10, 31, 2004): 1099188000 gmmktime(03, 00, 00, 10, 31, 2004): 1099191600 Diff: 3600, correct gmmktime(02, 00, 00, 03, 27, 2005): 1111892400 gmmktime(03, 00, 00, 03, 27, 2005): 1111892400 Diff: 0, broken ------------------------------------------------------------------------ [2004-09-16 08:23:23] [EMAIL PROTECTED] Rasmus, I can reproduce it here. No clue why yet. I guess I have something to do on the next plane ;-) ------------------------------------------------------------------------ [2004-09-15 19:11:24] schmidt_florian at f-24 dot com the timezone should!! be irrelevant thats the reason i use gmmktime()... but it dont work?! ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/30096 -- Edit this bug report at http://bugs.php.net/?id=30096&edit=1
