summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2008-07-30 18:00:44 +0000
committerDerick Rethans <derick@php.net>2008-07-30 18:00:44 +0000
commitb5e2564abfb6f3c2ff45b349c082189321095207 (patch)
treed4dd418bac5f8b23bbb7db3ba8630053cef8a563
parenta041ddc9d96128524ec514c5f3ec4a645a28131c (diff)
downloadphp-git-b5e2564abfb6f3c2ff45b349c082189321095207.tar.gz
- MFH: Fixed a bug with the YYYY-MM format not resetting the day correctly.
- MFH: Fixed a bug in the DateTime->modify() methods, it would not use the advanced relative time strings. - MFH: Fixed return values of all the modifying methods, they now properly return the object itself.
-rw-r--r--ext/date/lib/parse_date.c89
-rw-r--r--ext/date/lib/parse_date.re1
-rw-r--r--ext/date/php_date.c21
-rw-r--r--ext/date/tests/012.phpt27
-rw-r--r--ext/date/tests/013.phpt18
-rw-r--r--ext/date/tests/date_parse_001.phpt16
6 files changed, 105 insertions, 67 deletions
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 89631179ab..2c46810bbb 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 23 21:45:26 2008 */
+/* Generated by re2c 0.13.5 on Wed Jul 30 13:39:05 2008 */
#line 1 "ext/date/lib/parse_date.re"
/*
+----------------------------------------------------------------------+
@@ -982,7 +982,7 @@ yy2:
}
yy3:
YYDEBUG(3, *YYCURSOR);
-#line 1605 "ext/date/lib/parse_date.re"
+#line 1606 "ext/date/lib/parse_date.re"
{
int tz_not_found;
DEBUG_OUTPUT("tzcorrection | tz");
@@ -1306,7 +1306,7 @@ yy11:
if (yych <= '9') goto yy1343;
yy12:
YYDEBUG(12, *YYCURSOR);
-#line 1700 "ext/date/lib/parse_date.re"
+#line 1701 "ext/date/lib/parse_date.re"
{
add_error(s, "Unexpected character");
goto std;
@@ -2334,7 +2334,7 @@ yy46:
if (yych <= '9') goto yy52;
yy47:
YYDEBUG(47, *YYCURSOR);
-#line 1689 "ext/date/lib/parse_date.re"
+#line 1690 "ext/date/lib/parse_date.re"
{
goto std;
}
@@ -2347,7 +2347,7 @@ yy49:
YYDEBUG(49, *YYCURSOR);
++YYCURSOR;
YYDEBUG(50, *YYCURSOR);
-#line 1694 "ext/date/lib/parse_date.re"
+#line 1695 "ext/date/lib/parse_date.re"
{
s->pos = cursor; s->line++;
goto std;
@@ -2739,7 +2739,7 @@ yy69:
if (yych == 's') goto yy71;
yy70:
YYDEBUG(70, *YYCURSOR);
-#line 1673 "ext/date/lib/parse_date.re"
+#line 1674 "ext/date/lib/parse_date.re"
{
timelib_ull i;
DEBUG_OUTPUT("relative");
@@ -3507,7 +3507,7 @@ yy164:
}
yy165:
YYDEBUG(165, *YYCURSOR);
-#line 1536 "ext/date/lib/parse_date.re"
+#line 1537 "ext/date/lib/parse_date.re"
{
const timelib_relunit* relunit;
DEBUG_OUTPUT("daytext");
@@ -4001,7 +4001,7 @@ yy191:
}
yy192:
YYDEBUG(192, *YYCURSOR);
-#line 1595 "ext/date/lib/parse_date.re"
+#line 1596 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("monthtext");
TIMELIB_INIT;
@@ -4061,7 +4061,7 @@ yy196:
}
yy197:
YYDEBUG(197, *YYCURSOR);
-#line 1345 "ext/date/lib/parse_date.re"
+#line 1346 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datetextual | datenoyear");
TIMELIB_INIT;
@@ -4342,7 +4342,7 @@ yy220:
}
yy221:
YYDEBUG(221, *YYCURSOR);
-#line 1643 "ext/date/lib/parse_date.re"
+#line 1644 "ext/date/lib/parse_date.re"
{
int tz_not_found;
DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
@@ -5048,7 +5048,7 @@ yy277:
YYDEBUG(277, *YYCURSOR);
++YYCURSOR;
YYDEBUG(278, *YYCURSOR);
-#line 1619 "ext/date/lib/parse_date.re"
+#line 1620 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");
TIMELIB_INIT;
@@ -5244,7 +5244,7 @@ yy293:
++YYCURSOR;
yy294:
YYDEBUG(294, *YYCURSOR);
-#line 1319 "ext/date/lib/parse_date.re"
+#line 1320 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datenoday");
TIMELIB_INIT;
@@ -6466,7 +6466,7 @@ yy361:
if (yych <= '9') goto yy364;
yy363:
YYDEBUG(363, *YYCURSOR);
-#line 1459 "ext/date/lib/parse_date.re"
+#line 1460 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("pgtextshort");
TIMELIB_INIT;
@@ -7062,7 +7062,7 @@ yy389:
}
yy390:
YYDEBUG(390, *YYCURSOR);
-#line 1515 "ext/date/lib/parse_date.re"
+#line 1516 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("ago");
TIMELIB_INIT;
@@ -9338,7 +9338,7 @@ yy472:
}
yy473:
YYDEBUG(473, *YYCURSOR);
-#line 1358 "ext/date/lib/parse_date.re"
+#line 1359 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datenoyearrev");
TIMELIB_INIT;
@@ -9979,7 +9979,7 @@ yy531:
if (yych <= '9') goto yy538;
yy532:
YYDEBUG(532, *YYCURSOR);
-#line 1280 "ext/date/lib/parse_date.re"
+#line 1281 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datefull");
TIMELIB_INIT;
@@ -10729,7 +10729,7 @@ yy602:
YYDEBUG(603, *YYCURSOR);
++YYCURSOR;
YYDEBUG(604, *YYCURSOR);
-#line 1294 "ext/date/lib/parse_date.re"
+#line 1295 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("pointed date YYYY");
TIMELIB_INIT;
@@ -10776,7 +10776,7 @@ yy608:
if (yych <= '9') goto yy602;
yy609:
YYDEBUG(609, *YYCURSOR);
-#line 1306 "ext/date/lib/parse_date.re"
+#line 1307 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("pointed date YY");
TIMELIB_INIT;
@@ -11429,7 +11429,7 @@ yy653:
}
yy654:
YYDEBUG(654, *YYCURSOR);
-#line 1267 "ext/date/lib/parse_date.re"
+#line 1268 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("gnudateshort");
TIMELIB_INIT;
@@ -11794,7 +11794,7 @@ yy697:
if (yych <= ':') goto yy701;
yy698:
YYDEBUG(698, *YYCURSOR);
-#line 1485 "ext/date/lib/parse_date.re"
+#line 1486 "ext/date/lib/parse_date.re"
{
int tz_not_found;
DEBUG_OUTPUT("clf");
@@ -12417,7 +12417,7 @@ yy768:
YYDEBUG(768, *YYCURSOR);
++YYCURSOR;
YYDEBUG(769, *YYCURSOR);
-#line 1472 "ext/date/lib/parse_date.re"
+#line 1473 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("pgtextreverse");
TIMELIB_INIT;
@@ -12567,7 +12567,7 @@ yy780:
}
yy781:
YYDEBUG(781, *YYCURSOR);
-#line 1506 "ext/date/lib/parse_date.re"
+#line 1507 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("year4");
TIMELIB_INIT;
@@ -12726,7 +12726,7 @@ yy790:
}
yy791:
YYDEBUG(791, *YYCURSOR);
-#line 1332 "ext/date/lib/parse_date.re"
+#line 1333 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datenodayrev");
TIMELIB_INIT;
@@ -12953,7 +12953,7 @@ yy811:
if (yych <= '7') goto yy814;
yy812:
YYDEBUG(812, *YYCURSOR);
-#line 1440 "ext/date/lib/parse_date.re"
+#line 1441 "ext/date/lib/parse_date.re"
{
timelib_sll w, d;
DEBUG_OUTPUT("isoweek");
@@ -12981,7 +12981,7 @@ yy814:
YYDEBUG(814, *YYCURSOR);
++YYCURSOR;
YYDEBUG(815, *YYCURSOR);
-#line 1421 "ext/date/lib/parse_date.re"
+#line 1422 "ext/date/lib/parse_date.re"
{
timelib_sll w, d;
DEBUG_OUTPUT("isoweekday");
@@ -13063,7 +13063,7 @@ yy818:
}
yy819:
YYDEBUG(819, *YYCURSOR);
-#line 1408 "ext/date/lib/parse_date.re"
+#line 1409 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("pgydotd");
TIMELIB_INIT;
@@ -13178,7 +13178,7 @@ yy839:
++YYCURSOR;
yy840:
YYDEBUG(840, *YYCURSOR);
-#line 1382 "ext/date/lib/parse_date.re"
+#line 1383 "ext/date/lib/parse_date.re"
{
int tz_not_found;
DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");
@@ -13465,7 +13465,7 @@ yy845:
}
yy846:
YYDEBUG(846, *YYCURSOR);
-#line 1370 "ext/date/lib/parse_date.re"
+#line 1371 "ext/date/lib/parse_date.re"
{
DEBUG_OUTPUT("datenocolon");
TIMELIB_INIT;
@@ -14403,11 +14403,12 @@ yy971:
TIMELIB_HAVE_DATE();
s->time->y = timelib_get_nr((char **) &ptr, 4);
s->time->m = timelib_get_nr((char **) &ptr, 2);
+ s->time->d = 1;
TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-#line 14411 "ext/date/lib/parse_date.c"
+#line 14412 "ext/date/lib/parse_date.c"
yy972:
YYDEBUG(972, *YYCURSOR);
yyaccept = 22;
@@ -15438,7 +15439,7 @@ yy1065:
TIMELIB_DEINIT;
return TIMELIB_GNU_NOCOLON;
}
-#line 15442 "ext/date/lib/parse_date.c"
+#line 15443 "ext/date/lib/parse_date.c"
yy1066:
YYDEBUG(1066, *YYCURSOR);
yych = *++YYCURSOR;
@@ -15549,7 +15550,7 @@ yy1073:
TIMELIB_DEINIT;
return TIMELIB_ISO_NOCOLON;
}
-#line 15553 "ext/date/lib/parse_date.c"
+#line 15554 "ext/date/lib/parse_date.c"
yy1074:
YYDEBUG(1074, *YYCURSOR);
yyaccept = 25;
@@ -16447,7 +16448,7 @@ yy1114:
}
yy1115:
YYDEBUG(1115, *YYCURSOR);
-#line 1578 "ext/date/lib/parse_date.re"
+#line 1579 "ext/date/lib/parse_date.re"
{
timelib_sll i;
int behavior = 0;
@@ -16463,7 +16464,7 @@ yy1115:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 16467 "ext/date/lib/parse_date.c"
+#line 16468 "ext/date/lib/parse_date.c"
yy1116:
YYDEBUG(1116, *YYCURSOR);
++YYCURSOR;
@@ -16535,7 +16536,7 @@ yy1123:
TIMELIB_DEINIT;
return TIMELIB_WEEK_DAY_OF_MONTH;
}
-#line 16539 "ext/date/lib/parse_date.c"
+#line 16540 "ext/date/lib/parse_date.c"
yy1125:
YYDEBUG(1125, *YYCURSOR);
yyaccept = 26;
@@ -16643,7 +16644,7 @@ yy1138:
}
yy1139:
YYDEBUG(1139, *YYCURSOR);
-#line 1554 "ext/date/lib/parse_date.re"
+#line 1555 "ext/date/lib/parse_date.re"
{
timelib_sll i;
int behavior = 0;
@@ -16666,7 +16667,7 @@ yy1139:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 16670 "ext/date/lib/parse_date.c"
+#line 16671 "ext/date/lib/parse_date.c"
yy1140:
YYDEBUG(1140, *YYCURSOR);
yych = *++YYCURSOR;
@@ -19106,7 +19107,7 @@ yy1289:
TIMELIB_DEINIT;
return TIMELIB_LF_DAY_OF_MONTH;
}
-#line 19110 "ext/date/lib/parse_date.c"
+#line 19111 "ext/date/lib/parse_date.c"
yy1290:
YYDEBUG(1290, *YYCURSOR);
yych = *++YYCURSOR;
@@ -20216,7 +20217,7 @@ yy1345:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 20220 "ext/date/lib/parse_date.c"
+#line 20221 "ext/date/lib/parse_date.c"
yy1346:
YYDEBUG(1346, *YYCURSOR);
yych = *++YYCURSOR;
@@ -20663,7 +20664,7 @@ yy1375:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 20667 "ext/date/lib/parse_date.c"
+#line 20668 "ext/date/lib/parse_date.c"
yy1376:
YYDEBUG(1376, *YYCURSOR);
yych = *++YYCURSOR;
@@ -20707,7 +20708,7 @@ yy1378:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 20711 "ext/date/lib/parse_date.c"
+#line 20712 "ext/date/lib/parse_date.c"
yy1379:
YYDEBUG(1379, *YYCURSOR);
yych = *++YYCURSOR;
@@ -22539,7 +22540,7 @@ yy1458:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 22543 "ext/date/lib/parse_date.c"
+#line 22544 "ext/date/lib/parse_date.c"
yy1459:
YYDEBUG(1459, *YYCURSOR);
yych = *++YYCURSOR;
@@ -22689,7 +22690,7 @@ yy1466:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 22693 "ext/date/lib/parse_date.c"
+#line 22694 "ext/date/lib/parse_date.c"
yy1467:
YYDEBUG(1467, *YYCURSOR);
yyaccept = 0;
@@ -23180,7 +23181,7 @@ yy1489:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 23184 "ext/date/lib/parse_date.c"
+#line 23185 "ext/date/lib/parse_date.c"
yy1490:
YYDEBUG(1490, *YYCURSOR);
yyaccept = 0;
@@ -23326,7 +23327,7 @@ yy1495:
goto yy1489;
}
}
-#line 1704 "ext/date/lib/parse_date.re"
+#line 1705 "ext/date/lib/parse_date.re"
}
diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re
index 8b48a80a0e..44d9c81e81 100644
--- a/ext/date/lib/parse_date.re
+++ b/ext/date/lib/parse_date.re
@@ -1258,6 +1258,7 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) space 'of
TIMELIB_HAVE_DATE();
s->time->y = timelib_get_nr((char **) &ptr, 4);
s->time->m = timelib_get_nr((char **) &ptr, 2);
+ s->time->d = 1;
TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index d85613467a..50646eb65e 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2795,20 +2795,15 @@ PHP_FUNCTION(date_modify)
DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
tmp_time = timelib_strtotime(modify, modify_len, NULL, DATE_TIMEZONEDB);
- dateobj->time->relative.y = tmp_time->relative.y;
- dateobj->time->relative.m = tmp_time->relative.m;
- dateobj->time->relative.d = tmp_time->relative.d;
- dateobj->time->relative.h = tmp_time->relative.h;
- dateobj->time->relative.i = tmp_time->relative.i;
- dateobj->time->relative.s = tmp_time->relative.s;
- dateobj->time->relative.weekday = tmp_time->relative.weekday;
+ memcpy(&dateobj->time->relative, &tmp_time->relative, sizeof(struct timelib_rel_time));
dateobj->time->have_relative = tmp_time->have_relative;
- dateobj->time->relative.have_weekday_relative = tmp_time->relative.have_weekday_relative;
dateobj->time->sse_uptodate = 0;
timelib_time_dtor(tmp_time);
timelib_update_ts(dateobj->time, NULL);
timelib_update_from_sse(dateobj->time);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
@@ -2948,6 +2943,8 @@ PHP_FUNCTION(date_timezone_set)
}
timelib_set_timezone(dateobj->time, tzobj->tzi.tz);
timelib_unixtime2local(dateobj->time, dateobj->time->sse);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
@@ -3004,6 +3001,8 @@ PHP_FUNCTION(date_time_set)
dateobj->time->i = i;
dateobj->time->s = s;
timelib_update_ts(dateobj->time, NULL);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
@@ -3025,6 +3024,8 @@ PHP_FUNCTION(date_date_set)
dateobj->time->m = m;
dateobj->time->d = d;
timelib_update_ts(dateobj->time, NULL);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
@@ -3049,6 +3050,8 @@ PHP_FUNCTION(date_isodate_set)
dateobj->time->have_relative = 1;
timelib_update_ts(dateobj->time, NULL);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
@@ -3068,6 +3071,8 @@ PHP_FUNCTION(date_timestamp_set)
DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp);
timelib_update_ts(dateobj->time, NULL);
+
+ RETURN_ZVAL(object, 1, 0);
}
/* }}} */
diff --git a/ext/date/tests/012.phpt b/ext/date/tests/012.phpt
index 1eaeca0996..d16983bc06 100644
--- a/ext/date/tests/012.phpt
+++ b/ext/date/tests/012.phpt
@@ -20,15 +20,36 @@ var_dump($dto->format("Y/m/d H:i:s"));
echo "Done\n";
?>
--EXPECTF--
-NULL
+object(DateTime)#1 (3) {
+ ["date"]=>
+ string(19) "2006-01-23 00:00:00"
+ ["timezone_type"]=>
+ int(3)
+ ["timezone"]=>
+ string(3) "UTC"
+}
string(19) "2006/01/23 00:00:00"
Warning: date_isodate_set() expects at least 3 parameters, 2 given in %s on line %d
bool(false)
string(19) "2006/01/23 00:00:00"
-NULL
+object(DateTime)#1 (3) {
+ ["date"]=>
+ string(19) "2006-01-30 00:00:00"
+ ["timezone_type"]=>
+ int(3)
+ ["timezone"]=>
+ string(3) "UTC"
+}
string(19) "2006/01/30 00:00:00"
-NULL
+object(DateTime)#1 (3) {
+ ["date"]=>
+ string(19) "2007-12-10 00:00:00"
+ ["timezone_type"]=>
+ int(3)
+ ["timezone"]=>
+ string(3) "UTC"
+}
string(19) "2007/12/10 00:00:00"
Warning: date_isodate_set() expects at most 4 parameters, 5 given in %s on line %d
diff --git a/ext/date/tests/013.phpt b/ext/date/tests/013.phpt
index 35c87405ee..f374142058 100644
--- a/ext/date/tests/013.phpt
+++ b/ext/date/tests/013.phpt
@@ -37,8 +37,22 @@ string(19) "2006.12.12 00:00:00"
Warning: date_date_set() expects exactly 4 parameters, 3 given in %s on line %d
bool(false)
string(19) "2006.12.12 00:00:00"
-NULL
+object(DateTime)#1 (3) {
+ ["date"]=>
+ string(19) "2006-02-15 00:00:00"
+ ["timezone_type"]=>
+ int(3)
+ ["timezone"]=>
+ string(3) "UTC"
+}
string(19) "2006.02.15 00:00:00"
-NULL
+object(DateTime)#1 (3) {
+ ["date"]=>
+ string(19) "2008-01-29 00:00:00"
+ ["timezone_type"]=>
+ int(3)
+ ["timezone"]=>
+ string(3) "UTC"
+}
string(19) "2008.01.29 00:00:00"
Done
diff --git a/ext/date/tests/date_parse_001.phpt b/ext/date/tests/date_parse_001.phpt
index 7b85628a4c..d9b40b49b3 100644
--- a/ext/date/tests/date_parse_001.phpt
+++ b/ext/date/tests/date_parse_001.phpt
@@ -79,7 +79,7 @@ array(15) {
["month"]=>
int(12)
["day"]=>
- bool(false)
+ int(1)
["hour"]=>
bool(false)
["minute"]=>
@@ -89,11 +89,9 @@ array(15) {
["fraction"]=>
bool(false)
["warning_count"]=>
- int(1)
+ int(0)
["warnings"]=>
- array(1) {
- [12]=>
- string(27) "The parsed date was invalid"
+ array(0) {
}
["error_count"]=>
int(1)
@@ -175,7 +173,7 @@ array(12) {
["month"]=>
int(3)
["day"]=>
- bool(false)
+ int(1)
["hour"]=>
bool(false)
["minute"]=>
@@ -185,11 +183,9 @@ array(12) {
["fraction"]=>
bool(false)
["warning_count"]=>
- int(1)
+ int(0)
["warnings"]=>
- array(1) {
- [8]=>
- string(27) "The parsed date was invalid"
+ array(0) {
}
["error_count"]=>
int(0)