From: Derick Rethans Date: Wed, 23 Jul 2008 18:50:37 +0000 (+0000) Subject: - MFH: Fixed bug #43452 (strings containing a weekday, or a number plus weekday X-Git-Tag: php-5.3.0alpha1~180 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=11f9cd84f7a499257fbb9c67e64748076301eb52;p=php - MFH: Fixed bug #43452 (strings containing a weekday, or a number plus weekday behaved incorrect of the current day-of-week was the same as the one in the phrase). --- diff --git a/NEWS b/NEWS index 9c7832428a..4f96442d32 100644 --- a/NEWS +++ b/NEWS @@ -249,6 +249,9 @@ PHP NEWS - Fixed bug #43808 (date_create never fails (even when it should)). (Derick) - Fixed bug #43527 (DateTime created from a timestamp reports environment timezone). (Derick) +- Fixed bug #43452 (strings containing a weekday, or a number plus weekday + behaved incorrect of the current day-of-week was the same as the one in the + phrase). (Derick) - Fixed bug #43426 (crash on nested call_user_func() calls). (Dmitry) - Fixed bug #43323 (Wrong count abstract methods). (Felipe, Dmitry) - Fixed bug #43261 (Use ^ as the escape with escapeshellcmd() on Windows). (Scott) diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index e08a794497..96e61b44a3 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Wed Jul 16 17:24:19 2008 */ +/* Generated by re2c 0.13.5 on Wed Jul 23 19:59:35 2008 */ #line 1 "ext/date/lib/parse_date.re" /* +----------------------------------------------------------------------+ @@ -2749,7 +2749,7 @@ yy70: while(*ptr) { i = timelib_get_unsigned_nr((char **) &ptr, 24); timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, 0, s); + timelib_set_relative((char **) &ptr, i, 1, s); } TIMELIB_DEINIT; return TIMELIB_RELATIVE; diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index 2a66d51461..d8ca59146a 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -1680,7 +1680,7 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) ' of'; while(*ptr) { i = timelib_get_unsigned_nr((char **) &ptr, 24); timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, 0, s); + timelib_set_relative((char **) &ptr, i, 1, s); } TIMELIB_DEINIT; return TIMELIB_RELATIVE; diff --git a/ext/date/tests/bug43452.phpt b/ext/date/tests/bug43452.phpt new file mode 100644 index 0000000000..8d312c4628 --- /dev/null +++ b/ext/date/tests/bug43452.phpt @@ -0,0 +1,71 @@ +--TEST-- +Bug #43452 ("weekday" is not equivalent to "1 weekday" of the current weekday is "weekday") +--INI-- +date.default_timezone=Europe/Oslo +--FILE-- + is equivalent to 1 and will *not* forward if the current day +// (November 1st) is the same day of week. +$day = strtotime( "Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "1 Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "2 Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "3 Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n\n"; + +// forward one week, then behaves like above for week days +$day = strtotime( "Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "+1 week Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "+2 week Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "+3 week Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n\n"; + +// First, second, etc skip to the first/second weekday *after* the current day. +// This makes "first thursday" equivalent to "+1 week thursday" - but only +// if the current day-of-week is the one mentioned in the phrase. +$day = strtotime( "Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "first Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "second Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "third Thursday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n\n"; + +// Now the same where the current day-of-week does not match the one in the +// phrase. +$day = strtotime( "Friday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "first Friday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "second Friday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n"; +$day = strtotime( "third Friday Nov 2007" ); +echo date( DateTime::ISO8601, $day ), "\n\n"; + +?> +--EXPECT-- +2007-11-01T00:00:00+0100 +2007-11-01T00:00:00+0100 +2007-11-08T00:00:00+0100 +2007-11-15T00:00:00+0100 + +2007-11-01T00:00:00+0100 +2007-11-08T00:00:00+0100 +2007-11-15T00:00:00+0100 +2007-11-22T00:00:00+0100 + +2007-11-01T00:00:00+0100 +2007-11-08T00:00:00+0100 +2007-11-15T00:00:00+0100 +2007-11-22T00:00:00+0100 + +2007-11-02T00:00:00+0100 +2007-11-02T00:00:00+0100 +2007-11-09T00:00:00+0100 +2007-11-16T00:00:00+0100