derick Fri Sep 2 05:33:09 2005 EDT Added files: (Branch: PHP_5_1) /php-src/ext/date/tests bug34304.phpt
Modified files: /php-src NEWS /php-src/ext/date php_date.c /php-src/ext/date/lib dow.c timelib.h Log: - Fixed bug #34304 (date() doesn't have a modifier for ISO Week Day). http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2027.2.47&r2=1.2027.2.48&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.47 php-src/NEWS:1.2027.2.48 --- php-src/NEWS:1.2027.2.47 Fri Sep 2 05:13:58 2005 +++ php-src/NEWS Fri Sep 2 05:33:05 2005 @@ -25,6 +25,7 @@ - Fixed bug #34310 (foreach($arr as $c->d => $x) crashes). (Dmitry) - Fixed bug #34307 (OnUpdateStringUnempty INI options can be set empty). (Jani) - Fixed bug #34306 (wddx_serialize_value() crashes with long array keys). (Jani) +- Fixed bug #34304 (date() doesn't have a modifier for ISO Week Day). (Derick) - Fixed bug #34302 (date('W') do not return leading zeros for week 1 to 9). (Derick) - Fixed bug #34299 (ReflectionClass::isInstantiable() returns true for abstract http://cvs.php.net/diff.php/php-src/ext/date/php_date.c?r1=1.43.2.3&r2=1.43.2.4&ty=u Index: php-src/ext/date/php_date.c diff -u php-src/ext/date/php_date.c:1.43.2.3 php-src/ext/date/php_date.c:1.43.2.4 --- php-src/ext/date/php_date.c:1.43.2.3 Tue Aug 30 05:17:09 2005 +++ php-src/ext/date/php_date.c Fri Sep 2 05:33:08 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_date.c,v 1.43.2.3 2005/08/30 09:17:09 derick Exp $ */ +/* $Id: php_date.c,v 1.43.2.4 2005/09/02 09:33:08 derick Exp $ */ #include "php.h" #include "php_streams.h" @@ -389,6 +389,7 @@ case 'l': snprintf(buffer, 32, "%s", day_full_names[timelib_day_of_week(t->y, t->m, t->d)]); break; case 'S': snprintf(buffer, 32, "%s", english_suffix(t->d)); break; case 'w': snprintf(buffer, 32, "%d", (int) timelib_day_of_week(t->y, t->m, t->d)); break; + case 'N': snprintf(buffer, 32, "%d", (int) timelib_iso_day_of_week(t->y, t->m, t->d)); break; case 'z': snprintf(buffer, 32, "%d", (int) timelib_day_of_year(t->y, t->m, t->d)); break; /* week */ http://cvs.php.net/diff.php/php-src/ext/date/lib/dow.c?r1=1.8.2.1&r2=1.8.2.2&ty=u Index: php-src/ext/date/lib/dow.c diff -u php-src/ext/date/lib/dow.c:1.8.2.1 php-src/ext/date/lib/dow.c:1.8.2.2 --- php-src/ext/date/lib/dow.c:1.8.2.1 Wed Aug 31 10:29:23 2005 +++ php-src/ext/date/lib/dow.c Fri Sep 2 05:33:08 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dow.c,v 1.8.2.1 2005/08/31 14:29:23 derick Exp $ */ +/* $Id: dow.c,v 1.8.2.2 2005/09/02 09:33:08 derick Exp $ */ #include "timelib.h" @@ -31,9 +31,9 @@ return c < 0 ? c + 7 : c; } -timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) +static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_sll d, int iso) { - timelib_sll c1, y1, m1; + timelib_sll c1, y1, m1, dow; /* Only valid for Gregorian calendar */ if (y < 1753) { @@ -42,7 +42,23 @@ c1 = century_value(y / 100); y1 = (y % 100); m1 = timelib_is_leap(y) ? m_table_leap[m] : m_table_common[m]; - return (c1 + y1 + m1 + (y1 / 4) + d) % 7; + dow = (c1 + y1 + m1 + (y1 / 4) + d) % 7; + if (iso) { + if (dow == 0) { + dow = 7; + } + } + return dow; +} + +timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) +{ + return timelib_day_of_week_ex(y, m, d, 0); +} + +timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) +{ + return timelib_day_of_week_ex(y, m, d, 1); } /* jan feb mar apr may jun jul aug sep oct nov dec */ http://cvs.php.net/diff.php/php-src/ext/date/lib/timelib.h?r1=1.10.2.1&r2=1.10.2.2&ty=u Index: php-src/ext/date/lib/timelib.h diff -u php-src/ext/date/lib/timelib.h:1.10.2.1 php-src/ext/date/lib/timelib.h:1.10.2.2 --- php-src/ext/date/lib/timelib.h:1.10.2.1 Thu Aug 25 05:47:27 2005 +++ php-src/ext/date/lib/timelib.h Fri Sep 2 05:33:08 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: timelib.h,v 1.10.2.1 2005/08/25 09:47:27 derick Exp $ */ +/* $Id: timelib.h,v 1.10.2.2 2005/09/02 09:33:08 derick Exp $ */ #ifndef __TIMELIB_H__ #define __TIMELIB_H__ @@ -40,6 +40,7 @@ /* From dow.c */ timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); +timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d); timelib_sll timelib_daynr_from_weeknr(timelib_sll y, timelib_sll w, timelib_sll d); timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m); http://cvs.php.net/co.php/php-src/ext/date/tests/bug34304.phpt?r=1.1&p=1 Index: php-src/ext/date/tests/bug34304.phpt +++ php-src/ext/date/tests/bug34304.phpt -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php