derick Fri Sep 2 05:41:10 2005 EDT
Modified files:
/php-src/ext/date php_date.c
/php-src/ext/date/lib dow.c timelib.h
Log:
- MF51: Fixed bug #34304 (date() doesn't have a modifier for ISO Week Day).
http://cvs.php.net/diff.php/php-src/ext/date/php_date.c?r1=1.50&r2=1.51&ty=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.50 php-src/ext/date/php_date.c:1.51
--- php-src/ext/date/php_date.c:1.50 Fri Sep 2 05:39:21 2005
+++ php-src/ext/date/php_date.c Fri Sep 2 05:41:06 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.50 2005/09/02 09:39:21 derick Exp $ */
+/* $Id: php_date.c,v 1.51 2005/09/02 09:41:06 derick Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -489,6 +489,7 @@
case 'l': length = date_spprintf(&buffer, 32 TSRMLS_CC,
"%R", localized ? IS_UNICODE : IS_STRING,
dayname_full(timelib_day_of_week(t->y, t->m, t->d), localized)); break;
case 'S': length = date_spprintf(&buffer, 32 TSRMLS_CC,
"%s", english_suffix(t->d)); break;
case 'w': length = date_spprintf(&buffer, 32 TSRMLS_CC,
"%d", (int) timelib_day_of_week(t->y, t->m, t->d)); break;
+ case 'N': length = date_spprintf(&buffer, 32 TSRMLS_CC,
"%d", (int) timelib_iso_day_of_week(t->y, t->m, t->d)); break;
case 'z': length = date_spprintf(&buffer, 32 TSRMLS_CC,
"%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.9&r2=1.10&ty=u
Index: php-src/ext/date/lib/dow.c
diff -u php-src/ext/date/lib/dow.c:1.9 php-src/ext/date/lib/dow.c:1.10
--- php-src/ext/date/lib/dow.c:1.9 Wed Aug 31 10:31:45 2005
+++ php-src/ext/date/lib/dow.c Fri Sep 2 05:41:08 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dow.c,v 1.9 2005/08/31 14:31:45 derick Exp $ */
+/* $Id: dow.c,v 1.10 2005/09/02 09:41: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.11&r2=1.12&ty=u
Index: php-src/ext/date/lib/timelib.h
diff -u php-src/ext/date/lib/timelib.h:1.11 php-src/ext/date/lib/timelib.h:1.12
--- php-src/ext/date/lib/timelib.h:1.11 Fri Aug 12 19:46:42 2005
+++ php-src/ext/date/lib/timelib.h Fri Sep 2 05:41:08 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: timelib.h,v 1.11 2005/08/12 23:46:42 wez Exp $ */
+/* $Id: timelib.h,v 1.12 2005/09/02 09:41: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);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php