Edit report at http://bugs.php.net/bug.php?id=50475&edit=1
ID: 50475 Comment by: Eric at Deplagne dot name Reported by: nandobrt at gmail dot com Summary: DateTime::setISODate followed by DateTime::setTime Status: Open Type: Bug Package: Date/time related Operating System: Windows XP PHP Version: 5.3SVN-2009-12-15 (snap) New Comment: same with php 5.3.1 on debian squeeze Previous Comments: ------------------------------------------------------------------------ [2010-01-19 13:05:37] yoarvi at gmail dot com date_isodate_set should reset the have_relative flag once it has updated the date/time value. The following patch (5.3 svn tree) includes a fix and a test case for this bug: Index: ext/date/php_date.c =================================================================== --- ext/date/php_date.c (revision 293574) +++ ext/date/php_date.c (working copy) @@ -3033,6 +3033,8 @@ timelib_update_ts(dateobj->time, NULL); + dateobj->time->have_relative = 0; + RETURN_ZVAL(object, 1, 0); } /* }}} */ Index: ext/date/tests/bug50475.phpt =================================================================== --- ext/date/tests/bug50475.phpt (revision 0) +++ ext/date/tests/bug50475.phpt (revision 0) @@ -0,0 +1,16 @@ +--TEST-- +Bug #50475 (DateTime::setISODate followed by DateTime::setTime) +--FILE-- +<?php +date_default_timezone_set('Asia/Calcutta'); + +$date = new DateTime('18-01-2009 00:00:00'); +$date->setISODate(2009, 6, 1); +echo $date->format('Y-m-d H:i:s') . "\n"; +$date->setTime(8, 0); +echo $date->format('Y-m-d H:i:s') . "\n"; +?> +--EXPECT-- +2009-02-02 00:00:00 +2009-02-02 08:00:00 + ------------------------------------------------------------------------ [2009-12-15 03:23:53] nandobrt at gmail dot com Description: ------------ Calling setTime on a DateTime object after having called setISODate will change its date. Reproduce code: --------------- $date = new DateTime(); $date->setISODate(2009, 6); echo $date->format('Y-m-d H:i:s') . "<br />"; $date->setTime(8, 0); echo $date->format('Y-m-d H:i:s'); Expected result: ---------------- 2009-02-02 01:11:15 2009-02-02 08:00:00 Actual result: -------------- 2009-02-02 01:11:15 2009-03-06 08:00:00 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=50475&edit=1