From 55626549d81d0feadb1d160be78fcf2b898a48cc Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 5 Oct 2016 11:24:15 -0400 Subject: Improve support for microseconds with Date/Time It fixes several bugs: - Fixed bug #45554 (Inconsistent behavior of the u format char). - Fixed bug #48225 (DateTime parser doesn't set microseconds for "now"). - Fixed bug #52514 (microseconds are missing in DateTime class). - Fixed bug #52519 (microseconds in DateInterval are missing). - Fixed bug #68506 (General DateTime improvments needed for microseconds to become useful). - Fixed bug #73109 (timelib_meridian doesn't parse dots correctly). - Fixed bug #73247 (DateTime constructor does not initialise microseconds property). It also updates timelib to 2016.04, and updates a data mapping file, which causes changes to the volatile abbreviations tests. --- NEWS | 15 + ext/date/config.w32 | 1 + ext/date/lib/interval.c | 3 + ext/date/lib/parse_date.c | 1204 ++++++++++---------- ext/date/lib/parse_date.re | 41 +- ext/date/lib/timelib.c | 5 +- ext/date/lib/timelib.h | 5 +- ext/date/lib/timelib.m4 | 2 +- ext/date/lib/timelib_structs.h | 3 +- ext/date/lib/timezonemap.h | 293 +---- ext/date/lib/tm2unixtime.c | 15 + ext/date/lib/unixtime2tm.c | 7 + ext/date/php_date.c | 73 +- ext/date/tests/010.phpt | 19 +- ext/date/tests/DateTimeZone_getLocation.phpt | 17 +- .../DateTimeZone_listAbbreviations_basic1.phpt | 74 +- ext/date/tests/DateTime_setTime_error.phpt | 5 +- ext/date/tests/bug45682.phpt | 4 +- ext/date/tests/bug48678.phpt | 2 + ext/date/tests/bug49081.phpt | 1 + ext/date/tests/bug49778.phpt | 6 +- ext/date/tests/bug52113.phpt | 24 +- ext/date/tests/bug52738.phpt | 1 + ext/date/tests/bug52808.phpt | 12 +- ext/date/tests/bug53437.phpt | 8 +- ext/date/tests/bug53437_var2.phpt | 8 +- ext/date/tests/bug53437_var4.phpt | 6 +- ext/date/tests/bug53437_var5.phpt | 4 +- ext/date/tests/bug53437_var6.phpt | 49 + ext/date/tests/bug60774.phpt | 2 + ext/date/tests/date_diff1.phpt | 6 +- ...interval_create_from_date_string_nullparam.phpt | 6 +- ...val_create_from_date_string_wrongparam_002.phpt | 3 +- ext/date/tests/date_time_fractions.phpt | 99 ++ .../date_time_fractions_create_from_format.phpt | 29 + ext/date/tests/date_time_fractions_serialize.phpt | 25 + ext/date/tests/date_time_set_error.phpt | 5 +- .../tests/timezone_abbreviations_list_basic1.phpt | 74 +- ext/date/tests/timezone_name_from_abbr_basic1.phpt | 10 +- ext/spl/tests/bug70155.phpt | 4 +- 40 files changed, 1237 insertions(+), 933 deletions(-) create mode 100644 ext/date/tests/bug53437_var6.phpt create mode 100644 ext/date/tests/date_time_fractions.phpt create mode 100644 ext/date/tests/date_time_fractions_create_from_format.phpt create mode 100644 ext/date/tests/date_time_fractions_serialize.phpt diff --git a/NEWS b/NEWS index d1f4b5a81b..eb4c578b03 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,21 @@ PHP NEWS . Fixed bug #73126 (Cannot pass parameter 1 by reference). (Anatol) . Fixed bug #69579 (Invalid free in extension trait). (John Boehr) +- Date: + . Fixed bug #45554 (Inconsistent behavior of the u format char). (Derick) + . Fixed bug #48225 (DateTime parser doesn't set microseconds for "now"). + (Derick) + . Fixed bug #52514 (microseconds are missing in DateTime class). (Derick) + . Fixed bug #52519 (microseconds in DateInterval are missing). (Derick) + . Fixed bug #60089 (DateTime::createFromFormat() U after u nukes microtime). + (Derick) + . Fixed bug #68506 (General DateTime improvments needed for microseconds to + become useful). (Derick) + . Fixed bug #73109 (timelib_meridian doesn't parse dots correctly). (Derick) + . Fixed bug #73247 (DateTime constructor does not initialise microseconds + property). (Derick) + + - GD: . Fixed bug #50194 (imagettftext broken on transparent background w/o alphablending). (cmb) diff --git a/ext/date/config.w32 b/ext/date/config.w32 index ff5c4fff1c..889032aa85 100755 --- a/ext/date/config.w32 +++ b/ext/date/config.w32 @@ -11,6 +11,7 @@ var tl_config = FSO.CreateTextFile("ext/date/lib/timelib_config.h", true); tl_config.WriteLine("#include \"config.w32.h\""); tl_config.WriteLine("#include "); tl_config.WriteLine("#define TIMELIB_OMIT_STDINT 1"); +tl_config.WriteLine("#define HAVE_GETTIMEOFDAY 1"); tl_config.WriteLine("#include \"zend.h\""); tl_config.WriteLine("#define timelib_malloc emalloc"); tl_config.WriteLine("#define timelib_realloc erealloc"); diff --git a/ext/date/lib/interval.c b/ext/date/lib/interval.c index 9c1cc3b273..dee9f92eed 100644 --- a/ext/date/lib/interval.c +++ b/ext/date/lib/interval.c @@ -65,6 +65,7 @@ timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two) rt->h = two->h - one->h; rt->i = two->i - one->i; rt->s = two->s - one->s; + rt->f = two->f - one->f; if (one_backup.dst == 0 && two_backup.dst == 1 && two->sse >= one->sse + 86400 - dst_corr) { rt->h += dst_h_corr; rt->i += dst_m_corr; @@ -110,6 +111,7 @@ timelib_time *timelib_add(timelib_time *old_time, timelib_rel_time *interval) t->relative.h = interval->h * bias; t->relative.i = interval->i * bias; t->relative.s = interval->s * bias; + t->relative.f = interval->f * bias; } t->have_relative = 1; t->sse_uptodate = 0; @@ -145,6 +147,7 @@ timelib_time *timelib_sub(timelib_time *old_time, timelib_rel_time *interval) t->relative.h = 0 - (interval->h * bias); t->relative.i = 0 - (interval->i * bias); t->relative.s = 0 - (interval->s * bias); + t->relative.f = 0 - (interval->f * bias); t->have_relative = 1; t->sse_uptodate = 0; diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index a23dc81db2..c1547a0f32 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 on Fri Sep 30 20:30:54 2016 */ +/* Generated by re2c 0.15.3 on Wed Oct 5 11:54:35 2016 */ #line 1 "ext/date/lib/parse_date.re" /* * The MIT License (MIT) @@ -824,7 +824,7 @@ static int scan(Scanner *s, timelib_tz_get_wrapper tz_get_wrapper) std: s->tok = cursor; s->len = 0; -#line 950 "ext/date/lib/parse_date.re" +#line 951 "ext/date/lib/parse_date.re" @@ -951,19 +951,19 @@ yy2: } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; - goto yy1523; + goto yy1531; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych >= 'a') goto yy145; } else { - if (yych <= 'e') goto yy1532; + if (yych <= 'e') goto yy1540; if (yych <= 'z') goto yy145; } } yy3: -#line 1630 "ext/date/lib/parse_date.re" +#line 1659 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("tzcorrection | tz"); @@ -986,7 +986,7 @@ yy4: } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; - goto yy1523; + goto yy1531; } } else { if (yych <= 'd') { @@ -994,7 +994,7 @@ yy4: if (yych <= '`') goto yy3; goto yy140; } else { - if (yych <= 'e') goto yy1523; + if (yych <= 'e') goto yy1531; if (yych <= 'z') goto yy140; goto yy3; } @@ -1008,12 +1008,12 @@ yy5: goto yy140; } else { if (yych <= 'H') { - if (yych <= 'E') goto yy1494; + if (yych <= 'E') goto yy1502; goto yy140; } else { - if (yych <= 'I') goto yy1495; + if (yych <= 'I') goto yy1503; if (yych <= 'N') goto yy140; - goto yy1493; + goto yy1501; } } } else { @@ -1022,15 +1022,15 @@ yy5: if (yych <= 'Z') goto yy140; goto yy3; } else { - if (yych == 'e') goto yy1510; + if (yych == 'e') goto yy1518; goto yy145; } } else { if (yych <= 'n') { - if (yych <= 'i') goto yy1511; + if (yych <= 'i') goto yy1519; goto yy145; } else { - if (yych <= 'o') goto yy1509; + if (yych <= 'o') goto yy1517; if (yych <= 'z') goto yy145; goto yy3; } @@ -1045,12 +1045,12 @@ yy6: goto yy140; } else { if (yych <= 'H') { - if (yych <= 'E') goto yy1494; + if (yych <= 'E') goto yy1502; goto yy140; } else { - if (yych <= 'I') goto yy1495; + if (yych <= 'I') goto yy1503; if (yych <= 'N') goto yy140; - goto yy1493; + goto yy1501; } } } else { @@ -1059,15 +1059,15 @@ yy6: if (yych <= 'Z') goto yy140; goto yy3; } else { - if (yych == 'e') goto yy1494; + if (yych == 'e') goto yy1502; goto yy140; } } else { if (yych <= 'n') { - if (yych <= 'i') goto yy1495; + if (yych <= 'i') goto yy1503; goto yy140; } else { - if (yych <= 'o') goto yy1493; + if (yych <= 'o') goto yy1501; if (yych <= 'z') goto yy140; goto yy3; } @@ -1079,24 +1079,24 @@ yy7: if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; - goto yy1463; + goto yy1471; } else { - if (yych == 'I') goto yy1464; + if (yych == 'I') goto yy1472; if (yych <= 'N') goto yy140; - goto yy1465; + goto yy1473; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1478; + if (yych <= 'a') goto yy1486; goto yy145; } else { if (yych <= 'n') { - if (yych <= 'i') goto yy1479; + if (yych <= 'i') goto yy1487; goto yy145; } else { - if (yych <= 'o') goto yy1480; + if (yych <= 'o') goto yy1488; if (yych <= 'z') goto yy145; goto yy3; } @@ -1108,24 +1108,24 @@ yy8: if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; - goto yy1463; + goto yy1471; } else { - if (yych == 'I') goto yy1464; + if (yych == 'I') goto yy1472; if (yych <= 'N') goto yy140; - goto yy1465; + goto yy1473; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1463; + if (yych <= 'a') goto yy1471; goto yy140; } else { if (yych <= 'n') { - if (yych <= 'i') goto yy1464; + if (yych <= 'i') goto yy1472; goto yy140; } else { - if (yych <= 'o') goto yy1465; + if (yych <= 'o') goto yy1473; if (yych <= 'z') goto yy140; goto yy3; } @@ -1137,15 +1137,15 @@ yy9: switch (yych) { case ')': goto yy139; case '0': - case '1': goto yy1393; - case '2': goto yy1394; + case '1': goto yy1401; + case '2': goto yy1402; case '3': case '4': case '5': case '6': case '7': case '8': - case '9': goto yy1395; + case '9': goto yy1403; case 'A': case 'B': case 'C': @@ -1167,11 +1167,11 @@ yy9: case 'X': case 'Y': case 'Z': goto yy140; - case 'E': goto yy1388; - case 'H': goto yy1389; - case 'O': goto yy1390; - case 'U': goto yy1391; - case 'W': goto yy1392; + case 'E': goto yy1396; + case 'H': goto yy1397; + case 'O': goto yy1398; + case 'U': goto yy1399; + case 'W': goto yy1400; case 'a': case 'b': case 'c': @@ -1193,11 +1193,11 @@ yy9: case 'x': case 'y': case 'z': goto yy145; - case 'e': goto yy1431; - case 'h': goto yy1432; - case 'o': goto yy1433; - case 'u': goto yy1434; - case 'w': goto yy1435; + case 'e': goto yy1439; + case 'h': goto yy1440; + case 'o': goto yy1441; + case 'u': goto yy1442; + case 'w': goto yy1443; default: goto yy3; } yy10: @@ -1206,15 +1206,15 @@ yy10: switch (yych) { case ')': goto yy139; case '0': - case '1': goto yy1393; - case '2': goto yy1394; + case '1': goto yy1401; + case '2': goto yy1402; case '3': case '4': case '5': case '6': case '7': case '8': - case '9': goto yy1395; + case '9': goto yy1403; case 'A': case 'B': case 'C': @@ -1258,15 +1258,15 @@ yy10: case 'y': case 'z': goto yy140; case 'E': - case 'e': goto yy1388; + case 'e': goto yy1396; case 'H': - case 'h': goto yy1389; + case 'h': goto yy1397; case 'O': - case 'o': goto yy1390; + case 'o': goto yy1398; case 'U': - case 'u': goto yy1391; + case 'u': goto yy1399; case 'W': - case 'w': goto yy1392; + case 'w': goto yy1400; default: goto yy3; } yy11: @@ -1276,7 +1276,7 @@ yy11: if (yych <= '/') goto yy12; if (yych <= '9') goto yy1385; yy12: -#line 1725 "ext/date/lib/parse_date.re" +#line 1754 "ext/date/lib/parse_date.re" { add_error(s, "Unexpected character"); goto std; @@ -2295,7 +2295,7 @@ yy48: if (yych <= '/') goto yy49; if (yych <= '9') goto yy54; yy49: -#line 1714 "ext/date/lib/parse_date.re" +#line 1743 "ext/date/lib/parse_date.re" { goto std; } @@ -2305,7 +2305,7 @@ yy50: goto yy49; yy51: ++YYCURSOR; -#line 1719 "ext/date/lib/parse_date.re" +#line 1748 "ext/date/lib/parse_date.re" { s->pos = cursor; s->line++; goto std; @@ -2372,7 +2372,7 @@ yy54: } yy56: YYCURSOR = YYMARKER; - if (yyaccept <= 16) { + if (yyaccept <= 17) { if (yyaccept <= 8) { if (yyaccept <= 4) { if (yyaccept <= 2) { @@ -2408,98 +2408,102 @@ yy56: } } } else { - if (yyaccept <= 12) { - if (yyaccept <= 10) { - if (yyaccept == 9) { - goto yy392; + if (yyaccept <= 13) { + if (yyaccept <= 11) { + if (yyaccept <= 10) { + if (yyaccept == 9) { + goto yy392; + } else { + goto yy475; + } } else { - goto yy475; + goto yy490; } } else { - if (yyaccept == 11) { - goto yy490; - } else { + if (yyaccept == 12) { goto yy611; + } else { + goto yy656; } } } else { - if (yyaccept <= 14) { - if (yyaccept == 13) { - goto yy656; - } else { + if (yyaccept <= 15) { + if (yyaccept == 14) { goto yy666; + } else { + goto yy763; } } else { - if (yyaccept == 15) { - goto yy763; - } else { + if (yyaccept == 16) { goto yy783; + } else { + goto yy814; } } } } } else { - if (yyaccept <= 25) { - if (yyaccept <= 21) { - if (yyaccept <= 19) { - if (yyaccept <= 18) { - if (yyaccept == 17) { - goto yy814; - } else { + if (yyaccept <= 26) { + if (yyaccept <= 22) { + if (yyaccept <= 20) { + if (yyaccept <= 19) { + if (yyaccept == 18) { goto yy821; + } else { + goto yy848; } } else { - goto yy848; + goto yy793; } } else { - if (yyaccept == 20) { - goto yy793; - } else { + if (yyaccept == 21) { goto yy454; + } else { + goto yy973; } } } else { - if (yyaccept <= 23) { - if (yyaccept == 22) { - goto yy973; - } else { + if (yyaccept <= 24) { + if (yyaccept == 23) { goto yy842; + } else { + goto yy1067; } } else { - if (yyaccept == 24) { - goto yy1067; - } else { + if (yyaccept == 25) { goto yy1075; + } else { + goto yy1117; } } } } else { - if (yyaccept <= 29) { - if (yyaccept <= 27) { - if (yyaccept == 26) { - goto yy1117; - } else { + if (yyaccept <= 30) { + if (yyaccept <= 28) { + if (yyaccept == 27) { goto yy1141; + } else { + goto yy1294; } } else { - if (yyaccept == 28) { - goto yy1294; + if (yyaccept == 29) { + goto yy1387; } else { - goto yy1417; + goto yy1425; } } } else { - if (yyaccept <= 31) { - if (yyaccept == 30) { - goto yy1420; + if (yyaccept <= 32) { + if (yyaccept == 31) { + goto yy1428; } else { - goto yy1500; + goto yy1508; } } else { - if (yyaccept == 32) { - goto yy1508; + if (yyaccept == 33) { + goto yy1516; } else { - goto yy1531; + goto yy1539; } } } @@ -2677,7 +2681,7 @@ yy71: if (yych == 'S') goto yy73; if (yych == 's') goto yy73; yy72: -#line 1698 "ext/date/lib/parse_date.re" +#line 1727 "ext/date/lib/parse_date.re" { timelib_ull i; DEBUG_OUTPUT("relative"); @@ -2692,7 +2696,7 @@ yy72: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 2696 "" +#line 2700 "" yy73: yych = *++YYCURSOR; if (yych == 'D') goto yy74; @@ -3360,7 +3364,7 @@ yy165: } } yy166: -#line 1561 "ext/date/lib/parse_date.re" +#line 1590 "ext/date/lib/parse_date.re" { const timelib_relunit* relunit; DEBUG_OUTPUT("daytext"); @@ -3377,7 +3381,7 @@ yy166: TIMELIB_DEINIT; return TIMELIB_WEEKDAY; } -#line 3381 "" +#line 3385 "" yy167: yych = *++YYCURSOR; if (yych <= 'K') { @@ -3870,7 +3874,7 @@ yy192: } } yy193: -#line 1620 "ext/date/lib/parse_date.re" +#line 1649 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("monthtext"); TIMELIB_INIT; @@ -3879,7 +3883,7 @@ yy193: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 3883 "" +#line 3887 "" yy194: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 21) YYFILL(21); @@ -3925,7 +3929,7 @@ yy197: } } yy198: -#line 1366 "ext/date/lib/parse_date.re" +#line 1395 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datetextual | datenoyear"); @@ -3938,7 +3942,7 @@ yy198: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 3942 "" +#line 3946 "" yy199: yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); @@ -4183,7 +4187,7 @@ yy221: if (yych <= ':') goto yy224; } yy222: -#line 1668 "ext/date/lib/parse_date.re" +#line 1697 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); @@ -4212,7 +4216,7 @@ yy222: TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } -#line 4216 "" +#line 4220 "" yy223: yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); @@ -4854,7 +4858,7 @@ yy276: } yy277: ++YYCURSOR; -#line 1644 "ext/date/lib/parse_date.re" +#line 1673 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); TIMELIB_INIT; @@ -4877,7 +4881,7 @@ yy277: TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } -#line 4881 "" +#line 4885 "" yy279: yych = *++YYCURSOR; if (yych <= 0x1F) { @@ -5039,7 +5043,7 @@ yy292: yy293: ++YYCURSOR; yy294: -#line 1338 "ext/date/lib/parse_date.re" +#line 1367 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenoday"); @@ -5052,7 +5056,7 @@ yy294: TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } -#line 5056 "" +#line 5060 "" yy295: yych = *++YYCURSOR; if (yych <= '/') { @@ -6203,7 +6207,7 @@ yy361: if ((yych = *YYCURSOR) <= '/') goto yy363; if (yych <= '9') goto yy364; yy363: -#line 1482 "ext/date/lib/parse_date.re" +#line 1511 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextshort"); @@ -6216,7 +6220,7 @@ yy363: TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } -#line 6220 "" +#line 6224 "" yy364: yych = *++YYCURSOR; if (yych <= '/') goto yy363; @@ -6825,7 +6829,7 @@ yy391: if (yych <= 'z') goto yy142; } yy392: -#line 1540 "ext/date/lib/parse_date.re" +#line 1569 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("ago"); TIMELIB_INIT; @@ -6845,7 +6849,7 @@ yy392: TIMELIB_DEINIT; return TIMELIB_AGO; } -#line 6849 "" +#line 6853 "" yy393: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); @@ -8533,7 +8537,7 @@ yy452: yy453: ++YYCURSOR; yy454: -#line 1243 "ext/date/lib/parse_date.re" +#line 1272 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash"); TIMELIB_INIT; @@ -8544,7 +8548,7 @@ yy454: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 8548 "" +#line 8552 "" yy455: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); @@ -9080,7 +9084,7 @@ yy474: } } yy475: -#line 1380 "ext/date/lib/parse_date.re" +#line 1409 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenoyearrev"); TIMELIB_INIT; @@ -9091,7 +9095,7 @@ yy475: TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } -#line 9095 "" +#line 9099 "" yy476: yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); @@ -9219,7 +9223,7 @@ yy485: } yy487: ++YYCURSOR; -#line 1098 "ext/date/lib/parse_date.re" +#line 1127 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); TIMELIB_INIT; @@ -9235,7 +9239,7 @@ yy487: TIMELIB_DEINIT; return TIMELIB_TIME12; } -#line 9239 "" +#line 9243 "" yy489: yyaccept = 11; yych = *(YYMARKER = ++YYCURSOR); @@ -9246,7 +9250,7 @@ yy489: if (yych <= ':') goto yy492; } yy490: -#line 1135 "ext/date/lib/parse_date.re" +#line 1164 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long"); @@ -9271,7 +9275,7 @@ yy490: TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } -#line 9275 "" +#line 9279 "" yy491: yyaccept = 11; yych = *(YYMARKER = ++YYCURSOR); @@ -9548,7 +9552,7 @@ yy520: } yy522: ++YYCURSOR; -#line 1115 "ext/date/lib/parse_date.re" +#line 1144 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("mssqltime"); TIMELIB_INIT; @@ -9567,7 +9571,7 @@ yy522: TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } -#line 9571 "" +#line 9575 "" yy524: yyaccept = 11; YYMARKER = ++YYCURSOR; @@ -9662,7 +9666,7 @@ yy533: if ((yych = *YYCURSOR) <= '/') goto yy534; if (yych <= '9') goto yy540; yy534: -#line 1297 "ext/date/lib/parse_date.re" +#line 1326 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datefull"); @@ -9676,7 +9680,7 @@ yy534: TIMELIB_DEINIT; return TIMELIB_DATE_FULL; } -#line 9680 "" +#line 9684 "" yy535: yych = *++YYCURSOR; if (yych == 'M') goto yy536; @@ -10340,7 +10344,7 @@ yy604: if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; ++YYCURSOR; -#line 1312 "ext/date/lib/parse_date.re" +#line 1341 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("pointed date YYYY"); TIMELIB_INIT; @@ -10351,7 +10355,7 @@ yy604: TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } -#line 10355 "" +#line 10359 "" yy607: yyaccept = 11; yych = *(YYMARKER = ++YYCURSOR); @@ -10382,7 +10386,7 @@ yy610: if (yych <= '/') goto yy611; if (yych <= '9') goto yy604; yy611: -#line 1324 "ext/date/lib/parse_date.re" +#line 1353 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pointed date YY"); @@ -10395,7 +10399,7 @@ yy611: TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } -#line 10399 "" +#line 10403 "" yy612: yyaccept = 11; yych = *(YYMARKER = ++YYCURSOR); @@ -10991,7 +10995,7 @@ yy655: } } yy656: -#line 1283 "ext/date/lib/parse_date.re" +#line 1312 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshort"); @@ -11004,7 +11008,7 @@ yy656: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 11008 "" +#line 11012 "" yy657: yyaccept = 13; yych = *(YYMARKER = ++YYCURSOR); @@ -11100,7 +11104,7 @@ yy665: } } yy666: -#line 1227 "ext/date/lib/parse_date.re" +#line 1256 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("americanshort | american"); @@ -11115,7 +11119,7 @@ yy666: TIMELIB_DEINIT; return TIMELIB_AMERICAN; } -#line 11119 "" +#line 11123 "" yy667: yyaccept = 14; yych = *(YYMARKER = ++YYCURSOR); @@ -11314,7 +11318,7 @@ yy699: if (yych <= '9') goto yy702; if (yych <= ':') goto yy703; yy700: -#line 1510 "ext/date/lib/parse_date.re" +#line 1539 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("clf"); @@ -11334,7 +11338,7 @@ yy700: TIMELIB_DEINIT; return TIMELIB_CLF; } -#line 11338 "" +#line 11342 "" yy701: yych = *++YYCURSOR; if (yych <= '5') { @@ -11821,7 +11825,7 @@ yy762: if (yych <= 't') goto yy662; } yy763: -#line 1255 "ext/date/lib/parse_date.re" +#line 1284 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("iso8601date2"); @@ -11834,7 +11838,7 @@ yy763: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 11838 "" +#line 11842 "" yy764: yych = *++YYCURSOR; if (yych == 'C') goto yy765; @@ -11865,7 +11869,7 @@ yy769: if (yych >= '2') goto yy56; yy770: ++YYCURSOR; -#line 1496 "ext/date/lib/parse_date.re" +#line 1525 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextreverse"); @@ -11878,7 +11882,7 @@ yy770: TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } -#line 11882 "" +#line 11886 "" yy772: yych = *++YYCURSOR; if (yych == 'V') goto yy765; @@ -12003,7 +12007,7 @@ yy782: default: goto yy783; } yy783: -#line 1531 "ext/date/lib/parse_date.re" +#line 1560 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("year4"); TIMELIB_INIT; @@ -12011,7 +12015,7 @@ yy783: TIMELIB_DEINIT; return TIMELIB_CLF; } -#line 12015 "" +#line 12019 "" yy784: yych = *++YYCURSOR; switch (yych) { @@ -12149,7 +12153,7 @@ yy792: if (yych <= 'X') goto yy883; } yy793: -#line 1352 "ext/date/lib/parse_date.re" +#line 1381 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenodayrev"); @@ -12162,7 +12166,7 @@ yy793: TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } -#line 12166 "" +#line 12170 "" yy794: yych = *++YYCURSOR; if (yych == 'I') goto yy927; @@ -12356,7 +12360,7 @@ yy813: if (yych <= '/') goto yy814; if (yych <= '7') goto yy816; yy814: -#line 1463 "ext/date/lib/parse_date.re" +#line 1492 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweek"); @@ -12374,14 +12378,14 @@ yy814: TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } -#line 12378 "" +#line 12382 "" yy815: yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '8') goto yy56; yy816: ++YYCURSOR; -#line 1444 "ext/date/lib/parse_date.re" +#line 1473 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweekday"); @@ -12399,7 +12403,7 @@ yy816: TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } -#line 12403 "" +#line 12407 "" yy818: yych = *++YYCURSOR; if (yych <= '/') goto yy60; @@ -12459,7 +12463,7 @@ yy820: } } yy821: -#line 1430 "ext/date/lib/parse_date.re" +#line 1459 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgydotd"); @@ -12472,7 +12476,7 @@ yy821: TIMELIB_DEINIT; return TIMELIB_PG_YEARDAY; } -#line 12476 "" +#line 12480 "" yy822: yych = *++YYCURSOR; if (yych <= '/') goto yy60; @@ -12554,7 +12558,7 @@ yy840: yy841: ++YYCURSOR; yy842: -#line 1404 "ext/date/lib/parse_date.re" +#line 1433 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); @@ -12579,7 +12583,7 @@ yy842: TIMELIB_DEINIT; return TIMELIB_XMLRPC_SOAP; } -#line 12583 "" +#line 12587 "" yy843: yych = *++YYCURSOR; if (yych <= '2') { @@ -12835,7 +12839,7 @@ yy847: } } yy848: -#line 1392 "ext/date/lib/parse_date.re" +#line 1421 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenocolon"); TIMELIB_INIT; @@ -12846,7 +12850,7 @@ yy848: TIMELIB_DEINIT; return TIMELIB_DATE_NOCOLON; } -#line 12850 "" +#line 12854 "" yy849: yych = *++YYCURSOR; if (yych <= 'H') { @@ -13640,7 +13644,7 @@ yy972: if (yych <= '/') goto yy973; if (yych <= '9') goto yy995; yy973: -#line 1269 "ext/date/lib/parse_date.re" +#line 1298 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshorter"); @@ -13653,7 +13657,7 @@ yy973: TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } -#line 13657 "" +#line 13661 "" yy974: yyaccept = 22; yych = *(YYMARKER = ++YYCURSOR); @@ -14565,7 +14569,7 @@ yy1065: default: goto yy1067; } yy1067: -#line 1161 "ext/date/lib/parse_date.re" +#line 1190 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("gnunocolon"); TIMELIB_INIT; @@ -14587,7 +14591,7 @@ yy1067: TIMELIB_DEINIT; return TIMELIB_GNU_NOCOLON; } -#line 14591 "" +#line 14595 "" yy1068: yych = *++YYCURSOR; if (yych <= '/') goto yy60; @@ -14671,7 +14675,7 @@ yy1074: } } yy1075: -#line 1207 "ext/date/lib/parse_date.re" +#line 1236 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("iso8601nocolon"); @@ -14690,7 +14694,7 @@ yy1075: TIMELIB_DEINIT; return TIMELIB_ISO_NOCOLON; } -#line 14694 "" +#line 14698 "" yy1076: yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); @@ -15546,7 +15550,7 @@ yy1116: } } yy1117: -#line 1603 "ext/date/lib/parse_date.re" +#line 1632 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -15562,7 +15566,7 @@ yy1117: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 15566 "" +#line 15570 "" yy1118: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -15604,7 +15608,7 @@ yy1124: if (yych != 'f') goto yy56; yy1125: ++YYCURSOR; -#line 1076 "ext/date/lib/parse_date.re" +#line 1105 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -15625,7 +15629,7 @@ yy1125: TIMELIB_DEINIT; return TIMELIB_WEEK_DAY_OF_MONTH; } -#line 15629 "" +#line 15633 "" yy1127: yyaccept = 26; yych = *(YYMARKER = ++YYCURSOR); @@ -15718,7 +15722,7 @@ yy1140: } } yy1141: -#line 1579 "ext/date/lib/parse_date.re" +#line 1608 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -15741,7 +15745,7 @@ yy1141: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 15745 "" +#line 15749 "" yy1142: yych = *++YYCURSOR; goto yy1117; @@ -18265,7 +18269,7 @@ yy1293: if (yych <= '9') goto yy1296; goto yy1297; yy1294: -#line 1053 "ext/date/lib/parse_date.re" +#line 1082 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("backof | frontof"); TIMELIB_INIT; @@ -18287,7 +18291,7 @@ yy1294: TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } -#line 18291 "" +#line 18295 "" yy1295: yyaccept = 28; yych = *(YYMARKER = ++YYCURSOR); @@ -18526,7 +18530,7 @@ yy1314: if (yych != 'f') goto yy56; yy1315: ++YYCURSOR; -#line 1036 "ext/date/lib/parse_date.re" +#line 1065 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("firstdayof | lastdayof"); TIMELIB_INIT; @@ -18542,7 +18546,7 @@ yy1315: TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } -#line 18546 "" +#line 18550 "" yy1317: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); @@ -19896,13 +19900,15 @@ yy1384: if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy1385: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); + yyaccept = 29; + YYMARKER = ++YYCURSOR; + if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; + if (yych == '.') goto yy1388; if (yych <= '/') goto yy1387; if (yych <= '9') goto yy1385; yy1387: -#line 1010 "ext/date/lib/parse_date.re" +#line 1011 "ext/date/lib/parse_date.re" { timelib_ull i; @@ -19927,8 +19933,56 @@ yy1387: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 19931 "" +#line 19937 "" yy1388: + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + yych = *++YYCURSOR; + if (yych <= '/') goto yy56; + if (yych >= ':') goto yy56; + ++YYCURSOR; +#line 1037 "ext/date/lib/parse_date.re" + { + timelib_ull i, ms; + + TIMELIB_INIT; + TIMELIB_HAVE_RELATIVE(); + TIMELIB_UNHAVE_DATE(); + TIMELIB_UNHAVE_TIME(); + TIMELIB_HAVE_TZ(); + + i = timelib_get_unsigned_nr((char **) &ptr, 24); + ms = timelib_get_unsigned_nr((char **) &ptr, 24); + s->time->y = 1970; + s->time->m = 1; + s->time->d = 1; + s->time->h = s->time->i = s->time->s = 0; + s->time->f = 0.0; + s->time->relative.s += i; + s->time->relative.f = ((double) ms) / 1000000.0; + s->time->is_localtime = 1; + s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; + s->time->z = 0; + s->time->dst = 0; + + TIMELIB_DEINIT; + return TIMELIB_RELATIVE; + } +#line 19985 "" +yy1396: yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { @@ -19937,7 +19991,7 @@ yy1388: } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; - goto yy1429; + goto yy1437; } } else { if (yych <= 'm') { @@ -19945,58 +19999,58 @@ yy1388: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'n') goto yy1429; + if (yych <= 'n') goto yy1437; if (yych <= 'z') goto yy141; goto yy3; } } -yy1389: +yy1397: yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych == 'I') goto yy1421; + if (yych == 'I') goto yy1429; if (yych <= 'T') goto yy141; - goto yy1422; + goto yy1430; } } else { if (yych <= 'i') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'h') goto yy141; - goto yy1421; + goto yy1429; } else { - if (yych == 'u') goto yy1422; + if (yych == 'u') goto yy1430; if (yych <= 'z') goto yy141; goto yy3; } } -yy1390: +yy1398: yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych == 'D') goto yy1410; + if (yych == 'D') goto yy1418; if (yych <= 'L') goto yy141; - goto yy1411; + goto yy1419; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'c') goto yy141; - goto yy1410; + goto yy1418; } else { - if (yych == 'm') goto yy1411; + if (yych == 'm') goto yy1419; if (yych <= 'z') goto yy141; goto yy3; } } -yy1391: +yy1399: yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { @@ -20005,7 +20059,7 @@ yy1391: } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; - goto yy1406; + goto yy1414; } } else { if (yych <= 'd') { @@ -20013,12 +20067,12 @@ yy1391: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'e') goto yy1406; + if (yych <= 'e') goto yy1414; if (yych <= 'z') goto yy141; goto yy3; } } -yy1392: +yy1400: yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { @@ -20027,7 +20081,7 @@ yy1392: } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; - goto yy1402; + goto yy1410; } } else { if (yych <= 'd') { @@ -20035,68 +20089,68 @@ yy1392: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'e') goto yy1402; + if (yych <= 'e') goto yy1410; if (yych <= 'z') goto yy141; goto yy3; } } -yy1393: +yy1401: yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1064; goto yy56; } else { - if (yych <= '9') goto yy1396; + if (yych <= '9') goto yy1404; if (yych <= ':') goto yy1064; goto yy56; } -yy1394: +yy1402: yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1064; goto yy56; } else { - if (yych <= '4') goto yy1396; + if (yych <= '4') goto yy1404; if (yych == ':') goto yy1064; goto yy56; } -yy1395: +yy1403: yych = *++YYCURSOR; if (yych == '.') goto yy1064; if (yych == ':') goto yy1064; goto yy56; -yy1396: +yy1404: yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1064; goto yy56; } else { - if (yych <= '5') goto yy1397; + if (yych <= '5') goto yy1405; if (yych == ':') goto yy1064; goto yy56; } -yy1397: +yy1405: yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') goto yy1067; - if (yych <= '5') goto yy1399; - if (yych <= '6') goto yy1400; + if (yych <= '5') goto yy1407; + if (yych <= '6') goto yy1408; goto yy1067; -yy1399: +yy1407: yych = *++YYCURSOR; if (yych <= '/') goto yy56; - if (yych <= '9') goto yy1401; + if (yych <= '9') goto yy1409; goto yy56; -yy1400: +yy1408: yych = *++YYCURSOR; if (yych != '0') goto yy56; -yy1401: +yy1409: yych = *++YYCURSOR; goto yy1075; -yy1402: +yy1410: yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= ')') { @@ -20112,12 +20166,12 @@ yy1402: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 'l') goto yy1403; + if (yych <= 'l') goto yy1411; if (yych <= 'z') goto yy142; goto yy3; } } -yy1403: +yy1411: yych = *++YYCURSOR; if (yych <= 'F') { if (yych <= ')') { @@ -20133,12 +20187,12 @@ yy1403: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'f') goto yy1404; + if (yych <= 'f') goto yy1412; if (yych <= 'z') goto yy143; goto yy3; } } -yy1404: +yy1412: yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { @@ -20154,12 +20208,12 @@ yy1404: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 't') goto yy1405; + if (yych <= 't') goto yy1413; if (yych <= 'z') goto yy144; goto yy3; } } -yy1405: +yy1413: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -20170,7 +20224,7 @@ yy1405: if (yych == 'h') goto yy1205; goto yy3; } -yy1406: +yy1414: yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { @@ -20186,12 +20240,12 @@ yy1406: if (yych <= '`') goto yy166; goto yy142; } else { - if (yych <= 's') goto yy1407; + if (yych <= 's') goto yy1415; if (yych <= 'z') goto yy142; goto yy166; } } -yy1407: +yy1415: yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { @@ -20207,12 +20261,12 @@ yy1407: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'd') goto yy1408; + if (yych <= 'd') goto yy1416; if (yych <= 'z') goto yy143; goto yy3; } } -yy1408: +yy1416: yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; @@ -20222,12 +20276,12 @@ yy1408: if (yych <= 'Z') goto yy144; goto yy3; } else { - if (yych <= 'a') goto yy1409; + if (yych <= 'a') goto yy1417; if (yych <= 'z') goto yy144; goto yy3; } } -yy1409: +yy1417: yych = *++YYCURSOR; if (yych <= 'X') { if (yych == ')') goto yy139; @@ -20237,23 +20291,23 @@ yy1409: if (yych == 'y') goto yy172; goto yy3; } -yy1410: +yy1418: yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; - goto yy1418; + goto yy1426; } else { if (yych <= '`') { if (yych <= 'Z') goto yy142; goto yy3; } else { - if (yych <= 'a') goto yy1418; + if (yych <= 'a') goto yy1426; if (yych <= 'z') goto yy142; goto yy3; } } -yy1411: +yy1419: yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= ')') { @@ -20269,12 +20323,12 @@ yy1411: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 'o') goto yy1412; + if (yych <= 'o') goto yy1420; if (yych <= 'z') goto yy142; goto yy3; } } -yy1412: +yy1420: yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { @@ -20290,12 +20344,12 @@ yy1412: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'r') goto yy1413; + if (yych <= 'r') goto yy1421; if (yych <= 'z') goto yy143; goto yy3; } } -yy1413: +yy1421: yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { @@ -20311,29 +20365,29 @@ yy1413: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 'r') goto yy1414; + if (yych <= 'r') goto yy1422; if (yych <= 'z') goto yy144; goto yy3; } } -yy1414: +yy1422: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych <= 'O') goto yy1415; + if (yych <= 'O') goto yy1423; if (yych != 'o') goto yy3; } -yy1415: +yy1423: yych = *++YYCURSOR; - if (yych == 'W') goto yy1416; + if (yych == 'W') goto yy1424; if (yych != 'w') goto yy56; -yy1416: +yy1424: ++YYCURSOR; -yy1417: -#line 998 "ext/date/lib/parse_date.re" +yy1425: +#line 999 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("tomorrow"); TIMELIB_INIT; @@ -20344,8 +20398,8 @@ yy1417: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 20348 "" -yy1418: +#line 20402 "" +yy1426: yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { @@ -20361,22 +20415,22 @@ yy1418: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'y') goto yy1419; + if (yych <= 'y') goto yy1427; if (yych <= 'z') goto yy143; goto yy3; } } -yy1419: +yy1427: ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy144; - if (yych <= '`') goto yy1420; + if (yych <= '`') goto yy1428; if (yych <= 'z') goto yy144; } -yy1420: -#line 988 "ext/date/lib/parse_date.re" +yy1428: +#line 989 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("midnight | today"); TIMELIB_INIT; @@ -20385,8 +20439,8 @@ yy1420: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 20389 "" -yy1421: +#line 20443 "" +yy1429: yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= '@') { @@ -20394,8 +20448,8 @@ yy1421: goto yy3; } else { if (yych <= 'Q') goto yy142; - if (yych <= 'R') goto yy1427; - goto yy1428; + if (yych <= 'R') goto yy1435; + goto yy1436; } } else { if (yych <= 'q') { @@ -20403,13 +20457,13 @@ yy1421: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 'r') goto yy1427; - if (yych <= 's') goto yy1428; + if (yych <= 'r') goto yy1435; + if (yych <= 's') goto yy1436; if (yych <= 'z') goto yy142; goto yy3; } } -yy1422: +yy1430: yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { @@ -20425,12 +20479,12 @@ yy1422: if (yych <= '`') goto yy166; goto yy142; } else { - if (yych <= 'r') goto yy1423; + if (yych <= 'r') goto yy1431; if (yych <= 'z') goto yy142; goto yy166; } } -yy1423: +yy1431: yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { @@ -20446,12 +20500,12 @@ yy1423: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 's') goto yy1424; + if (yych <= 's') goto yy1432; if (yych <= 'z') goto yy143; goto yy3; } } -yy1424: +yy1432: yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { @@ -20467,27 +20521,27 @@ yy1424: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 'd') goto yy1425; + if (yych <= 'd') goto yy1433; if (yych <= 'z') goto yy144; goto yy3; } } -yy1425: +yy1433: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych <= 'A') goto yy1426; + if (yych <= 'A') goto yy1434; if (yych != 'a') goto yy3; } -yy1426: +yy1434: yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy172; goto yy56; -yy1427: +yy1435: yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { @@ -20509,7 +20563,7 @@ yy1427: goto yy3; } } -yy1428: +yy1436: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { @@ -20531,7 +20585,7 @@ yy1428: goto yy3; } } -yy1429: +yy1437: yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { @@ -20547,12 +20601,12 @@ yy1429: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 't') goto yy1430; + if (yych <= 't') goto yy1438; if (yych <= 'z') goto yy142; goto yy3; } } -yy1430: +yy1438: yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { @@ -20574,7 +20628,7 @@ yy1430: goto yy3; } } -yy1431: +yy1439: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { @@ -20589,7 +20643,7 @@ yy1431: } } else { if (yych <= '_') { - if (yych <= 'N') goto yy1429; + if (yych <= 'N') goto yy1437; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -20598,13 +20652,13 @@ yy1431: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'n') goto yy1461; + if (yych <= 'n') goto yy1469; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1432: +yy1440: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { @@ -20621,14 +20675,14 @@ yy1432: if (yych <= '/') goto yy147; goto yy3; } else { - if (yych == 'I') goto yy1421; + if (yych == 'I') goto yy1429; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= 'U') goto yy1422; + if (yych <= 'U') goto yy1430; goto yy141; } else { if (yych == '_') goto yy147; @@ -20636,16 +20690,16 @@ yy1432: } } else { if (yych <= 't') { - if (yych == 'i') goto yy1453; + if (yych == 'i') goto yy1461; goto yy146; } else { - if (yych <= 'u') goto yy1454; + if (yych <= 'u') goto yy1462; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1433: +yy1441: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { @@ -20662,14 +20716,14 @@ yy1433: if (yych <= '/') goto yy147; goto yy3; } else { - if (yych == 'D') goto yy1410; + if (yych == 'D') goto yy1418; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= 'M') goto yy1411; + if (yych <= 'M') goto yy1419; goto yy141; } else { if (yych == '_') goto yy147; @@ -20677,16 +20731,16 @@ yy1433: } } else { if (yych <= 'l') { - if (yych == 'd') goto yy1444; + if (yych == 'd') goto yy1452; goto yy146; } else { - if (yych <= 'm') goto yy1445; + if (yych <= 'm') goto yy1453; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1434: +yy1442: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { @@ -20701,7 +20755,7 @@ yy1434: } } else { if (yych <= '_') { - if (yych <= 'E') goto yy1406; + if (yych <= 'E') goto yy1414; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -20710,13 +20764,13 @@ yy1434: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'e') goto yy1440; + if (yych <= 'e') goto yy1448; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1435: +yy1443: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { @@ -20731,7 +20785,7 @@ yy1435: } } else { if (yych <= '_') { - if (yych <= 'E') goto yy1402; + if (yych <= 'E') goto yy1410; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -20740,13 +20794,13 @@ yy1435: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'e') goto yy1436; + if (yych <= 'e') goto yy1444; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1436: +yy1444: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'K') { @@ -20761,7 +20815,7 @@ yy1436: } } else { if (yych <= '_') { - if (yych <= 'L') goto yy1403; + if (yych <= 'L') goto yy1411; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -20770,13 +20824,13 @@ yy1436: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 'l') goto yy1437; + if (yych <= 'l') goto yy1445; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1437: +yy1445: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'E') { @@ -20791,7 +20845,7 @@ yy1437: } } else { if (yych <= '_') { - if (yych <= 'F') goto yy1404; + if (yych <= 'F') goto yy1412; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -20800,13 +20854,13 @@ yy1437: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'f') goto yy1438; + if (yych <= 'f') goto yy1446; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1438: +yy1446: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { @@ -20821,7 +20875,7 @@ yy1438: } } else { if (yych <= '_') { - if (yych <= 'T') goto yy1405; + if (yych <= 'T') goto yy1413; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -20830,13 +20884,13 @@ yy1438: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 't') goto yy1439; + if (yych <= 't') goto yy1447; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1439: +yy1447: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -20859,7 +20913,7 @@ yy1439: goto yy3; } } -yy1440: +yy1448: yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { @@ -20874,7 +20928,7 @@ yy1440: } } else { if (yych <= '_') { - if (yych <= 'S') goto yy1407; + if (yych <= 'S') goto yy1415; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; @@ -20883,13 +20937,13 @@ yy1440: if (yych <= '`') goto yy166; goto yy150; } else { - if (yych <= 's') goto yy1441; + if (yych <= 's') goto yy1449; if (yych <= 'z') goto yy150; goto yy166; } } } -yy1441: +yy1449: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -20904,7 +20958,7 @@ yy1441: } } else { if (yych <= '_') { - if (yych <= 'D') goto yy1408; + if (yych <= 'D') goto yy1416; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -20913,13 +20967,13 @@ yy1441: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'd') goto yy1442; + if (yych <= 'd') goto yy1450; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1442: +yy1450: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { @@ -20933,18 +20987,18 @@ yy1442: } } else { if (yych <= '_') { - if (yych <= 'A') goto yy1409; + if (yych <= 'A') goto yy1417; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1443; + if (yych <= 'a') goto yy1451; if (yych <= 'z') goto yy152; goto yy3; } } -yy1443: +yy1451: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { @@ -20967,7 +21021,7 @@ yy1443: goto yy3; } } -yy1444: +yy1452: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { @@ -20981,18 +21035,18 @@ yy1444: } } else { if (yych <= '_') { - if (yych <= 'A') goto yy1418; + if (yych <= 'A') goto yy1426; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1451; + if (yych <= 'a') goto yy1459; if (yych <= 'z') goto yy150; goto yy3; } } -yy1445: +yy1453: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { @@ -21007,7 +21061,7 @@ yy1445: } } else { if (yych <= '_') { - if (yych <= 'O') goto yy1412; + if (yych <= 'O') goto yy1420; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -21016,13 +21070,13 @@ yy1445: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 'o') goto yy1446; + if (yych <= 'o') goto yy1454; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1446: +yy1454: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { @@ -21037,7 +21091,7 @@ yy1446: } } else { if (yych <= '_') { - if (yych <= 'R') goto yy1413; + if (yych <= 'R') goto yy1421; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -21046,13 +21100,13 @@ yy1446: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'r') goto yy1447; + if (yych <= 'r') goto yy1455; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1447: +yy1455: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { @@ -21067,7 +21121,7 @@ yy1447: } } else { if (yych <= '_') { - if (yych <= 'R') goto yy1414; + if (yych <= 'R') goto yy1422; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -21076,13 +21130,13 @@ yy1447: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 'r') goto yy1448; + if (yych <= 'r') goto yy1456; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1448: +yy1456: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { @@ -21096,33 +21150,33 @@ yy1448: } } else { if (yych <= '`') { - if (yych <= 'O') goto yy1415; + if (yych <= 'O') goto yy1423; if (yych == '_') goto yy147; goto yy3; } else { - if (yych == 'o') goto yy1449; + if (yych == 'o') goto yy1457; if (yych <= 'z') goto yy153; goto yy3; } } -yy1449: +yy1457: yych = *++YYCURSOR; - if (yych == 'W') goto yy1416; + if (yych == 'W') goto yy1424; if (yych != 'w') goto yy154; - yyaccept = 29; + yyaccept = 30; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; - goto yy1417; + goto yy1425; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; - goto yy1417; + goto yy1425; } -yy1451: +yy1459: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { @@ -21137,7 +21191,7 @@ yy1451: } } else { if (yych <= '_') { - if (yych <= 'Y') goto yy1419; + if (yych <= 'Y') goto yy1427; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -21146,36 +21200,36 @@ yy1451: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'y') goto yy1452; + if (yych <= 'y') goto yy1460; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1452: - yyaccept = 30; +yy1460: + yyaccept = 31; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; - goto yy1420; + goto yy1428; } else { - if (yych == '.') goto yy1420; + if (yych == '.') goto yy1428; goto yy147; } } else { if (yych <= '^') { - if (yych <= '@') goto yy1420; + if (yych <= '@') goto yy1428; if (yych <= 'Z') goto yy144; - goto yy1420; + goto yy1428; } else { if (yych <= '_') goto yy147; - if (yych <= '`') goto yy1420; + if (yych <= '`') goto yy1428; if (yych <= 'z') goto yy152; - goto yy1420; + goto yy1428; } } -yy1453: +yy1461: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { @@ -21190,13 +21244,13 @@ yy1453: } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy142; - goto yy1427; + goto yy1435; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= 'S') goto yy1428; + if (yych <= 'S') goto yy1436; goto yy142; } else { if (yych == '_') goto yy147; @@ -21205,15 +21259,15 @@ yy1453: } else { if (yych <= 'r') { if (yych <= 'q') goto yy150; - goto yy1459; + goto yy1467; } else { - if (yych <= 's') goto yy1460; + if (yych <= 's') goto yy1468; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1454: +yy1462: yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { @@ -21228,7 +21282,7 @@ yy1454: } } else { if (yych <= '_') { - if (yych <= 'R') goto yy1423; + if (yych <= 'R') goto yy1431; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; @@ -21237,13 +21291,13 @@ yy1454: if (yych <= '`') goto yy166; goto yy150; } else { - if (yych <= 'r') goto yy1455; + if (yych <= 'r') goto yy1463; if (yych <= 'z') goto yy150; goto yy166; } } } -yy1455: +yy1463: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { @@ -21258,7 +21312,7 @@ yy1455: } } else { if (yych <= '_') { - if (yych <= 'S') goto yy1424; + if (yych <= 'S') goto yy1432; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -21267,13 +21321,13 @@ yy1455: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 's') goto yy1456; + if (yych <= 's') goto yy1464; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1456: +yy1464: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -21288,7 +21342,7 @@ yy1456: } } else { if (yych <= '_') { - if (yych <= 'D') goto yy1425; + if (yych <= 'D') goto yy1433; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -21297,13 +21351,13 @@ yy1456: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 'd') goto yy1457; + if (yych <= 'd') goto yy1465; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1457: +yy1465: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { @@ -21317,22 +21371,22 @@ yy1457: } } else { if (yych <= '_') { - if (yych <= 'A') goto yy1426; + if (yych <= 'A') goto yy1434; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1458; + if (yych <= 'a') goto yy1466; if (yych <= 'z') goto yy153; goto yy3; } } -yy1458: +yy1466: yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy185; goto yy154; -yy1459: +yy1467: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -21362,7 +21416,7 @@ yy1459: } } } -yy1460: +yy1468: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { @@ -21391,7 +21445,7 @@ yy1460: } } } -yy1461: +yy1469: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { @@ -21406,7 +21460,7 @@ yy1461: } } else { if (yych <= '_') { - if (yych <= 'T') goto yy1430; + if (yych <= 'T') goto yy1438; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -21415,13 +21469,13 @@ yy1461: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 't') goto yy1462; + if (yych <= 't') goto yy1470; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1462: +yy1470: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -21451,30 +21505,30 @@ yy1462: } } } -yy1463: +yy1471: yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych == 'R') goto yy1475; + if (yych == 'R') goto yy1483; if (yych <= 'X') goto yy141; - goto yy1476; + goto yy1484; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'q') goto yy141; - goto yy1475; + goto yy1483; } else { - if (yych == 'y') goto yy1476; + if (yych == 'y') goto yy1484; if (yych <= 'z') goto yy141; goto yy3; } } -yy1464: +yy1472: yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { @@ -21483,7 +21537,7 @@ yy1464: } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy141; - goto yy1469; + goto yy1477; } } else { if (yych <= 'c') { @@ -21491,12 +21545,12 @@ yy1464: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'd') goto yy1469; + if (yych <= 'd') goto yy1477; if (yych <= 'z') goto yy141; goto yy3; } } -yy1465: +yy1473: yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { @@ -21512,12 +21566,12 @@ yy1465: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'n') goto yy1466; + if (yych <= 'n') goto yy1474; if (yych <= 'z') goto yy141; goto yy3; } } -yy1466: +yy1474: yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { @@ -21533,12 +21587,12 @@ yy1466: if (yych <= '`') goto yy166; goto yy142; } else { - if (yych <= 'd') goto yy1467; + if (yych <= 'd') goto yy1475; if (yych <= 'z') goto yy142; goto yy166; } } -yy1467: +yy1475: yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; @@ -21548,12 +21602,12 @@ yy1467: if (yych <= 'Z') goto yy143; goto yy3; } else { - if (yych <= 'a') goto yy1468; + if (yych <= 'a') goto yy1476; if (yych <= 'z') goto yy143; goto yy3; } } -yy1468: +yy1476: yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { @@ -21575,7 +21629,7 @@ yy1468: goto yy3; } } -yy1469: +yy1477: yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { @@ -21591,12 +21645,12 @@ yy1469: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 'n') goto yy1470; + if (yych <= 'n') goto yy1478; if (yych <= 'z') goto yy142; goto yy3; } } -yy1470: +yy1478: yych = *++YYCURSOR; if (yych <= 'I') { if (yych <= ')') { @@ -21612,12 +21666,12 @@ yy1470: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'i') goto yy1471; + if (yych <= 'i') goto yy1479; if (yych <= 'z') goto yy143; goto yy3; } } -yy1471: +yy1479: yych = *++YYCURSOR; if (yych <= 'G') { if (yych <= ')') { @@ -21633,29 +21687,29 @@ yy1471: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 'g') goto yy1472; + if (yych <= 'g') goto yy1480; if (yych <= 'z') goto yy144; goto yy3; } } -yy1472: +yy1480: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych <= 'H') goto yy1473; + if (yych <= 'H') goto yy1481; if (yych != 'h') goto yy3; } -yy1473: +yy1481: yych = *++YYCURSOR; - if (yych == 'T') goto yy1474; + if (yych == 'T') goto yy1482; if (yych != 't') goto yy56; -yy1474: +yy1482: yych = *++YYCURSOR; - goto yy1420; -yy1475: + goto yy1428; +yy1483: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { @@ -21683,7 +21737,7 @@ yy1475: if (yych <= '9') goto yy195; goto yy193; } else { - if (yych == 'C') goto yy1477; + if (yych == 'C') goto yy1485; goto yy142; } } else { @@ -21691,13 +21745,13 @@ yy1475: if (yych <= '`') goto yy193; goto yy142; } else { - if (yych <= 'c') goto yy1477; + if (yych <= 'c') goto yy1485; if (yych <= 'z') goto yy142; goto yy193; } } } -yy1476: +yy1484: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { @@ -21722,7 +21776,7 @@ yy1476: goto yy193; } } -yy1477: +yy1485: yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { @@ -21744,7 +21798,7 @@ yy1477: goto yy3; } } -yy1478: +yy1486: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { @@ -21761,14 +21815,14 @@ yy1478: if (yych <= '/') goto yy147; goto yy3; } else { - if (yych == 'R') goto yy1475; + if (yych == 'R') goto yy1483; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= 'Y') goto yy1476; + if (yych <= 'Y') goto yy1484; goto yy141; } else { if (yych == '_') goto yy147; @@ -21776,16 +21830,16 @@ yy1478: } } else { if (yych <= 'x') { - if (yych == 'r') goto yy1490; + if (yych == 'r') goto yy1498; goto yy146; } else { - if (yych <= 'y') goto yy1491; + if (yych <= 'y') goto yy1499; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1479: +yy1487: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -21800,7 +21854,7 @@ yy1479: } } else { if (yych <= '_') { - if (yych <= 'D') goto yy1469; + if (yych <= 'D') goto yy1477; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -21809,13 +21863,13 @@ yy1479: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'd') goto yy1484; + if (yych <= 'd') goto yy1492; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1480: +yy1488: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { @@ -21830,7 +21884,7 @@ yy1480: } } else { if (yych <= '_') { - if (yych <= 'N') goto yy1466; + if (yych <= 'N') goto yy1474; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -21839,13 +21893,13 @@ yy1480: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'n') goto yy1481; + if (yych <= 'n') goto yy1489; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1481: +yy1489: yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -21860,7 +21914,7 @@ yy1481: } } else { if (yych <= '_') { - if (yych <= 'D') goto yy1467; + if (yych <= 'D') goto yy1475; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; @@ -21869,13 +21923,13 @@ yy1481: if (yych <= '`') goto yy166; goto yy150; } else { - if (yych <= 'd') goto yy1482; + if (yych <= 'd') goto yy1490; if (yych <= 'z') goto yy150; goto yy166; } } } -yy1482: +yy1490: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { @@ -21889,18 +21943,18 @@ yy1482: } } else { if (yych <= '_') { - if (yych <= 'A') goto yy1468; + if (yych <= 'A') goto yy1476; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; - if (yych <= 'a') goto yy1483; + if (yych <= 'a') goto yy1491; if (yych <= 'z') goto yy151; goto yy3; } } -yy1483: +yy1491: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { @@ -21930,7 +21984,7 @@ yy1483: } } } -yy1484: +yy1492: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { @@ -21945,7 +21999,7 @@ yy1484: } } else { if (yych <= '_') { - if (yych <= 'N') goto yy1470; + if (yych <= 'N') goto yy1478; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -21954,13 +22008,13 @@ yy1484: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 'n') goto yy1485; + if (yych <= 'n') goto yy1493; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1485: +yy1493: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'H') { @@ -21975,7 +22029,7 @@ yy1485: } } else { if (yych <= '_') { - if (yych <= 'I') goto yy1471; + if (yych <= 'I') goto yy1479; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -21984,13 +22038,13 @@ yy1485: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'i') goto yy1486; + if (yych <= 'i') goto yy1494; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1486: +yy1494: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'F') { @@ -22005,7 +22059,7 @@ yy1486: } } else { if (yych <= '_') { - if (yych <= 'G') goto yy1472; + if (yych <= 'G') goto yy1480; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -22014,13 +22068,13 @@ yy1486: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 'g') goto yy1487; + if (yych <= 'g') goto yy1495; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1487: +yy1495: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -22034,33 +22088,33 @@ yy1487: } } else { if (yych <= '`') { - if (yych <= 'H') goto yy1473; + if (yych <= 'H') goto yy1481; if (yych == '_') goto yy147; goto yy3; } else { - if (yych == 'h') goto yy1488; + if (yych == 'h') goto yy1496; if (yych <= 'z') goto yy153; goto yy3; } } -yy1488: +yy1496: yych = *++YYCURSOR; - if (yych == 'T') goto yy1474; + if (yych == 'T') goto yy1482; if (yych != 't') goto yy154; - yyaccept = 30; + yyaccept = 31; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; - goto yy1420; + goto yy1428; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; - goto yy1420; + goto yy1428; } -yy1490: +yy1498: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { @@ -22088,7 +22142,7 @@ yy1490: if (yych <= '@') goto yy193; goto yy142; } else { - if (yych <= 'C') goto yy1477; + if (yych <= 'C') goto yy1485; if (yych <= 'Z') goto yy142; goto yy193; } @@ -22098,13 +22152,13 @@ yy1490: if (yych <= '`') goto yy193; goto yy150; } else { - if (yych <= 'c') goto yy1492; + if (yych <= 'c') goto yy1500; if (yych <= 'z') goto yy150; goto yy193; } } } -yy1491: +yy1499: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { @@ -22139,7 +22193,7 @@ yy1491: } } } -yy1492: +yy1500: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -22169,7 +22223,7 @@ yy1492: } } } -yy1493: +yy1501: yych = *++YYCURSOR; if (yych <= 'W') { if (yych <= 'N') { @@ -22177,29 +22231,29 @@ yy1493: if (yych <= '@') goto yy3; goto yy141; } else { - if (yych <= 'O') goto yy1501; + if (yych <= 'O') goto yy1509; if (yych <= 'U') goto yy141; - if (yych <= 'V') goto yy1502; - goto yy1499; + if (yych <= 'V') goto yy1510; + goto yy1507; } } else { if (yych <= 'o') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'n') goto yy141; - goto yy1501; + goto yy1509; } else { if (yych <= 'v') { if (yych <= 'u') goto yy141; - goto yy1502; + goto yy1510; } else { - if (yych <= 'w') goto yy1499; + if (yych <= 'w') goto yy1507; if (yych <= 'z') goto yy141; goto yy3; } } } -yy1494: +yy1502: yych = *++YYCURSOR; if (yych <= 'X') { if (yych <= ')') { @@ -22208,7 +22262,7 @@ yy1494: } else { if (yych <= '@') goto yy3; if (yych <= 'W') goto yy141; - goto yy1498; + goto yy1506; } } else { if (yych <= 'w') { @@ -22216,12 +22270,12 @@ yy1494: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'x') goto yy1498; + if (yych <= 'x') goto yy1506; if (yych <= 'z') goto yy141; goto yy3; } } -yy1495: +yy1503: yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { @@ -22237,12 +22291,12 @@ yy1495: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 'n') goto yy1496; + if (yych <= 'n') goto yy1504; if (yych <= 'z') goto yy141; goto yy3; } } -yy1496: +yy1504: yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { @@ -22258,12 +22312,12 @@ yy1496: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 't') goto yy1497; + if (yych <= 't') goto yy1505; if (yych <= 'z') goto yy142; goto yy3; } } -yy1497: +yy1505: yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { @@ -22285,7 +22339,7 @@ yy1497: goto yy3; } } -yy1498: +yy1506: yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { @@ -22294,7 +22348,7 @@ yy1498: } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; - goto yy1428; + goto yy1436; } } else { if (yych <= 's') { @@ -22302,22 +22356,22 @@ yy1498: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 't') goto yy1428; + if (yych <= 't') goto yy1436; if (yych <= 'z') goto yy142; goto yy3; } } -yy1499: +yy1507: ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy142; - if (yych <= '`') goto yy1500; + if (yych <= '`') goto yy1508; if (yych <= 'z') goto yy142; } -yy1500: -#line 967 "ext/date/lib/parse_date.re" +yy1508: +#line 968 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("now"); TIMELIB_INIT; @@ -22325,8 +22379,8 @@ yy1500: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 22329 "" -yy1501: +#line 22383 "" +yy1509: yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { @@ -22335,7 +22389,7 @@ yy1501: } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy142; - goto yy1507; + goto yy1515; } } else { if (yych <= 'm') { @@ -22343,12 +22397,12 @@ yy1501: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 'n') goto yy1507; + if (yych <= 'n') goto yy1515; if (yych <= 'z') goto yy142; goto yy3; } } -yy1502: +yy1510: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { @@ -22383,13 +22437,13 @@ yy1502: if (yych <= '`') goto yy193; goto yy142; } else { - if (yych <= 'e') goto yy1503; + if (yych <= 'e') goto yy1511; if (yych <= 'z') goto yy142; goto yy193; } } } -yy1503: +yy1511: yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= ')') { @@ -22405,12 +22459,12 @@ yy1503: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'm') goto yy1504; + if (yych <= 'm') goto yy1512; if (yych <= 'z') goto yy143; goto yy3; } } -yy1504: +yy1512: yych = *++YYCURSOR; if (yych <= 'B') { if (yych <= ')') { @@ -22426,37 +22480,37 @@ yy1504: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 'b') goto yy1505; + if (yych <= 'b') goto yy1513; if (yych <= 'z') goto yy144; goto yy3; } } -yy1505: +yy1513: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych <= 'E') goto yy1506; + if (yych <= 'E') goto yy1514; if (yych != 'e') goto yy3; } -yy1506: +yy1514: yych = *++YYCURSOR; if (yych == 'R') goto yy205; if (yych == 'r') goto yy205; goto yy56; -yy1507: +yy1515: ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy143; - if (yych <= '`') goto yy1508; + if (yych <= '`') goto yy1516; if (yych <= 'z') goto yy143; } -yy1508: -#line 976 "ext/date/lib/parse_date.re" +yy1516: +#line 977 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("noon"); TIMELIB_INIT; @@ -22467,8 +22521,8 @@ yy1508: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 22471 "" -yy1509: +#line 22525 "" +yy1517: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { @@ -22486,15 +22540,15 @@ yy1509: if (yych <= '@') goto yy3; goto yy141; } else { - if (yych <= 'O') goto yy1501; + if (yych <= 'O') goto yy1509; if (yych <= 'U') goto yy141; - goto yy1502; + goto yy1510; } } } else { if (yych <= 'n') { if (yych <= '^') { - if (yych <= 'W') goto yy1499; + if (yych <= 'W') goto yy1507; if (yych <= 'Z') goto yy141; goto yy3; } else { @@ -22504,17 +22558,17 @@ yy1509: } } else { if (yych <= 'v') { - if (yych <= 'o') goto yy1516; + if (yych <= 'o') goto yy1524; if (yych <= 'u') goto yy146; - goto yy1517; + goto yy1525; } else { - if (yych <= 'w') goto yy1515; + if (yych <= 'w') goto yy1523; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1510: +yy1518: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { @@ -22529,7 +22583,7 @@ yy1510: } } else { if (yych <= '_') { - if (yych <= 'X') goto yy1498; + if (yych <= 'X') goto yy1506; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -22538,13 +22592,13 @@ yy1510: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'x') goto yy1514; + if (yych <= 'x') goto yy1522; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1511: +yy1519: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { @@ -22559,7 +22613,7 @@ yy1511: } } else { if (yych <= '_') { - if (yych <= 'N') goto yy1496; + if (yych <= 'N') goto yy1504; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -22568,13 +22622,13 @@ yy1511: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 'n') goto yy1512; + if (yych <= 'n') goto yy1520; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1512: +yy1520: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { @@ -22589,7 +22643,7 @@ yy1512: } } else { if (yych <= '_') { - if (yych <= 'T') goto yy1497; + if (yych <= 'T') goto yy1505; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -22598,13 +22652,13 @@ yy1512: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 't') goto yy1513; + if (yych <= 't') goto yy1521; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1513: +yy1521: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { @@ -22634,7 +22688,7 @@ yy1513: } } } -yy1514: +yy1522: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { @@ -22649,7 +22703,7 @@ yy1514: } } else { if (yych <= '_') { - if (yych <= 'T') goto yy1428; + if (yych <= 'T') goto yy1436; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -22658,36 +22712,36 @@ yy1514: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 't') goto yy1460; + if (yych <= 't') goto yy1468; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1515: - yyaccept = 31; +yy1523: + yyaccept = 32; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; - goto yy1500; + goto yy1508; } else { - if (yych == '.') goto yy1500; + if (yych == '.') goto yy1508; goto yy147; } } else { if (yych <= '^') { - if (yych <= '@') goto yy1500; + if (yych <= '@') goto yy1508; if (yych <= 'Z') goto yy142; - goto yy1500; + goto yy1508; } else { if (yych <= '_') goto yy147; - if (yych <= '`') goto yy1500; + if (yych <= '`') goto yy1508; if (yych <= 'z') goto yy150; - goto yy1500; + goto yy1508; } } -yy1516: +yy1524: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { @@ -22702,7 +22756,7 @@ yy1516: } } else { if (yych <= '_') { - if (yych <= 'N') goto yy1507; + if (yych <= 'N') goto yy1515; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -22711,13 +22765,13 @@ yy1516: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 'n') goto yy1522; + if (yych <= 'n') goto yy1530; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1517: +yy1525: yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { @@ -22745,7 +22799,7 @@ yy1517: if (yych <= '@') goto yy193; goto yy142; } else { - if (yych <= 'E') goto yy1503; + if (yych <= 'E') goto yy1511; if (yych <= 'Z') goto yy142; goto yy193; } @@ -22755,13 +22809,13 @@ yy1517: if (yych <= '`') goto yy193; goto yy150; } else { - if (yych <= 'e') goto yy1518; + if (yych <= 'e') goto yy1526; if (yych <= 'z') goto yy150; goto yy193; } } } -yy1518: +yy1526: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { @@ -22776,7 +22830,7 @@ yy1518: } } else { if (yych <= '_') { - if (yych <= 'M') goto yy1504; + if (yych <= 'M') goto yy1512; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -22785,13 +22839,13 @@ yy1518: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'm') goto yy1519; + if (yych <= 'm') goto yy1527; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1519: +yy1527: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { @@ -22806,7 +22860,7 @@ yy1519: } } else { if (yych <= '_') { - if (yych <= 'B') goto yy1505; + if (yych <= 'B') goto yy1513; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -22815,13 +22869,13 @@ yy1519: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 'b') goto yy1520; + if (yych <= 'b') goto yy1528; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1520: +yy1528: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { @@ -22835,44 +22889,44 @@ yy1520: } } else { if (yych <= '`') { - if (yych <= 'E') goto yy1506; + if (yych <= 'E') goto yy1514; if (yych == '_') goto yy147; goto yy3; } else { - if (yych == 'e') goto yy1521; + if (yych == 'e') goto yy1529; if (yych <= 'z') goto yy153; goto yy3; } } -yy1521: +yy1529: yych = *++YYCURSOR; if (yych == 'R') goto yy205; if (yych == 'r') goto yy376; goto yy154; -yy1522: - yyaccept = 32; +yy1530: + yyaccept = 33; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; - goto yy1508; + goto yy1516; } else { - if (yych == '.') goto yy1508; + if (yych == '.') goto yy1516; goto yy147; } } else { if (yych <= '^') { - if (yych <= '@') goto yy1508; + if (yych <= '@') goto yy1516; if (yych <= 'Z') goto yy143; - goto yy1508; + goto yy1516; } else { if (yych <= '_') goto yy147; - if (yych <= '`') goto yy1508; + if (yych <= '`') goto yy1516; if (yych <= 'z') goto yy151; - goto yy1508; + goto yy1516; } } -yy1523: +yy1531: yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { @@ -22888,12 +22942,12 @@ yy1523: if (yych <= '`') goto yy3; goto yy141; } else { - if (yych <= 's') goto yy1524; + if (yych <= 's') goto yy1532; if (yych <= 'z') goto yy141; goto yy3; } } -yy1524: +yy1532: yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { @@ -22909,12 +22963,12 @@ yy1524: if (yych <= '`') goto yy3; goto yy142; } else { - if (yych <= 't') goto yy1525; + if (yych <= 't') goto yy1533; if (yych <= 'z') goto yy142; goto yy3; } } -yy1525: +yy1533: yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { @@ -22930,12 +22984,12 @@ yy1525: if (yych <= '`') goto yy3; goto yy143; } else { - if (yych <= 'e') goto yy1526; + if (yych <= 'e') goto yy1534; if (yych <= 'z') goto yy143; goto yy3; } } -yy1526: +yy1534: yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { @@ -22951,33 +23005,33 @@ yy1526: if (yych <= '`') goto yy3; goto yy144; } else { - if (yych <= 'r') goto yy1527; + if (yych <= 'r') goto yy1535; if (yych <= 'z') goto yy144; goto yy3; } } -yy1527: +yy1535: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych == ')') goto yy139; goto yy3; } else { - if (yych <= 'D') goto yy1528; + if (yych <= 'D') goto yy1536; if (yych != 'd') goto yy3; } -yy1528: +yy1536: yych = *++YYCURSOR; - if (yych == 'A') goto yy1529; + if (yych == 'A') goto yy1537; if (yych != 'a') goto yy56; -yy1529: +yy1537: yych = *++YYCURSOR; - if (yych == 'Y') goto yy1530; + if (yych == 'Y') goto yy1538; if (yych != 'y') goto yy56; -yy1530: +yy1538: ++YYCURSOR; -yy1531: -#line 955 "ext/date/lib/parse_date.re" +yy1539: +#line 956 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("yesterday"); TIMELIB_INIT; @@ -22988,8 +23042,8 @@ yy1531: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 22992 "" -yy1532: +#line 23046 "" +yy1540: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { @@ -23004,7 +23058,7 @@ yy1532: } } else { if (yych <= '_') { - if (yych <= 'S') goto yy1524; + if (yych <= 'S') goto yy1532; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; @@ -23013,13 +23067,13 @@ yy1532: if (yych <= '`') goto yy3; goto yy146; } else { - if (yych <= 's') goto yy1533; + if (yych <= 's') goto yy1541; if (yych <= 'z') goto yy146; goto yy3; } } } -yy1533: +yy1541: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { @@ -23034,7 +23088,7 @@ yy1533: } } else { if (yych <= '_') { - if (yych <= 'T') goto yy1525; + if (yych <= 'T') goto yy1533; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; @@ -23043,13 +23097,13 @@ yy1533: if (yych <= '`') goto yy3; goto yy150; } else { - if (yych <= 't') goto yy1534; + if (yych <= 't') goto yy1542; if (yych <= 'z') goto yy150; goto yy3; } } } -yy1534: +yy1542: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { @@ -23064,7 +23118,7 @@ yy1534: } } else { if (yych <= '_') { - if (yych <= 'E') goto yy1526; + if (yych <= 'E') goto yy1534; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; @@ -23073,13 +23127,13 @@ yy1534: if (yych <= '`') goto yy3; goto yy151; } else { - if (yych <= 'e') goto yy1535; + if (yych <= 'e') goto yy1543; if (yych <= 'z') goto yy151; goto yy3; } } } -yy1535: +yy1543: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { @@ -23094,7 +23148,7 @@ yy1535: } } else { if (yych <= '_') { - if (yych <= 'R') goto yy1527; + if (yych <= 'R') goto yy1535; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; @@ -23103,13 +23157,13 @@ yy1535: if (yych <= '`') goto yy3; goto yy152; } else { - if (yych <= 'r') goto yy1536; + if (yych <= 'r') goto yy1544; if (yych <= 'z') goto yy152; goto yy3; } } } -yy1536: +yy1544: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { @@ -23123,37 +23177,37 @@ yy1536: } } else { if (yych <= '`') { - if (yych <= 'D') goto yy1528; + if (yych <= 'D') goto yy1536; if (yych == '_') goto yy147; goto yy3; } else { - if (yych == 'd') goto yy1537; + if (yych == 'd') goto yy1545; if (yych <= 'z') goto yy153; goto yy3; } } -yy1537: +yy1545: yych = *++YYCURSOR; - if (yych == 'A') goto yy1529; + if (yych == 'A') goto yy1537; if (yych != 'a') goto yy154; yych = *++YYCURSOR; - if (yych == 'Y') goto yy1530; + if (yych == 'Y') goto yy1538; if (yych != 'y') goto yy154; - yyaccept = 33; + yyaccept = 34; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; - goto yy1531; + goto yy1539; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; - goto yy1531; + goto yy1539; } } -#line 1729 "ext/date/lib/parse_date.re" +#line 1758 "ext/date/lib/parse_date.re" } @@ -23460,7 +23514,6 @@ timelib_time *timelib_parse_from_format(char *format, char *string, size_t len, s->time->m = 1; s->time->d = 1; s->time->h = s->time->i = s->time->s = 0; - s->time->f = 0.0; s->time->relative.s += tmp; s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; @@ -23618,13 +23671,20 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options) parsed->s = 0; parsed->f = 0; } + if ( + parsed->y != TIMELIB_UNSET || parsed->m != TIMELIB_UNSET || parsed->d != TIMELIB_UNSET || + parsed->h != TIMELIB_UNSET || parsed->i != TIMELIB_UNSET || parsed->s != TIMELIB_UNSET + ) { + if (parsed->f == TIMELIB_UNSET) parsed->f = 0; + } else { + if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0; + } if (parsed->y == TIMELIB_UNSET) parsed->y = now->y != TIMELIB_UNSET ? now->y : 0; - if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0; if (parsed->m == TIMELIB_UNSET) parsed->m = now->m != TIMELIB_UNSET ? now->m : 0; + if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0; if (parsed->h == TIMELIB_UNSET) parsed->h = now->h != TIMELIB_UNSET ? now->h : 0; if (parsed->i == TIMELIB_UNSET) parsed->i = now->i != TIMELIB_UNSET ? now->i : 0; if (parsed->s == TIMELIB_UNSET) parsed->s = now->s != TIMELIB_UNSET ? now->s : 0; - if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0; if (parsed->z == TIMELIB_UNSET) parsed->z = now->z != TIMELIB_UNSET ? now->z : 0; if (parsed->dst == TIMELIB_UNSET) parsed->dst = now->dst != TIMELIB_UNSET ? now->dst : 0; diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index 79dabe4ef6..ad14b96def 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -925,6 +925,7 @@ clf = day "/" monthabbr "/" year4 ":" hour24lz ":" minutelz ":" sec /* Timestamp format: @1126396800 */ timestamp = "@" "-"? [0-9]+; +timestampms = "@" "-"? [0-9]+ "." [0-9]{6}; /* To fix some ambiguities */ dateshortwithtimeshort12 = datenoyear timeshort12; @@ -1032,6 +1033,34 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) space 'of return TIMELIB_RELATIVE; } + timestampms + { + timelib_ull i, ms; + + TIMELIB_INIT; + TIMELIB_HAVE_RELATIVE(); + TIMELIB_UNHAVE_DATE(); + TIMELIB_UNHAVE_TIME(); + TIMELIB_HAVE_TZ(); + + i = timelib_get_unsigned_nr((char **) &ptr, 24); + ms = timelib_get_unsigned_nr((char **) &ptr, 24); + s->time->y = 1970; + s->time->m = 1; + s->time->d = 1; + s->time->h = s->time->i = s->time->s = 0; + s->time->f = 0.0; + s->time->relative.s += i; + s->time->relative.f = ((double) ms) / 1000000.0; + s->time->is_localtime = 1; + s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; + s->time->z = 0; + s->time->dst = 0; + + TIMELIB_DEINIT; + return TIMELIB_RELATIVE; + } + firstdayof | lastdayof { DEBUG_OUTPUT("firstdayof | lastdayof"); @@ -2032,7 +2061,6 @@ timelib_time *timelib_parse_from_format(char *format, char *string, size_t len, s->time->m = 1; s->time->d = 1; s->time->h = s->time->i = s->time->s = 0; - s->time->f = 0.0; s->time->relative.s += tmp; s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; @@ -2190,13 +2218,20 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options) parsed->s = 0; parsed->f = 0; } + if ( + parsed->y != TIMELIB_UNSET || parsed->m != TIMELIB_UNSET || parsed->d != TIMELIB_UNSET || + parsed->h != TIMELIB_UNSET || parsed->i != TIMELIB_UNSET || parsed->s != TIMELIB_UNSET + ) { + if (parsed->f == TIMELIB_UNSET) parsed->f = 0; + } else { + if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0; + } if (parsed->y == TIMELIB_UNSET) parsed->y = now->y != TIMELIB_UNSET ? now->y : 0; - if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0; if (parsed->m == TIMELIB_UNSET) parsed->m = now->m != TIMELIB_UNSET ? now->m : 0; + if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0; if (parsed->h == TIMELIB_UNSET) parsed->h = now->h != TIMELIB_UNSET ? now->h : 0; if (parsed->i == TIMELIB_UNSET) parsed->i = now->i != TIMELIB_UNSET ? now->i : 0; if (parsed->s == TIMELIB_UNSET) parsed->s = now->s != TIMELIB_UNSET ? now->s : 0; - if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0; if (parsed->z == TIMELIB_UNSET) parsed->z = now->z != TIMELIB_UNSET ? now->z : 0; if (parsed->dst == TIMELIB_UNSET) parsed->dst = now->dst != TIMELIB_UNSET ? now->dst : 0; diff --git a/ext/date/lib/timelib.c b/ext/date/lib/timelib.c index b9fb66f00f..84dba3d969 100644 --- a/ext/date/lib/timelib.c +++ b/ext/date/lib/timelib.c @@ -231,7 +231,7 @@ void timelib_dump_date(timelib_time *d, int options) printf("TS: %lld | %s%04lld-%02lld-%02lld %02lld:%02lld:%02lld", d->sse, d->y < 0 ? "-" : "", TIMELIB_LLABS(d->y), d->m, d->d, d->h, d->i, d->s); if (d->f > +0.0) { - printf(" %.5f", d->f); + printf(" %.6f", d->f); } if (d->is_localtime) { @@ -260,6 +260,9 @@ void timelib_dump_date(timelib_time *d, int options) if (d->have_relative) { printf("%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS", d->relative.y, d->relative.m, d->relative.d, d->relative.h, d->relative.i, d->relative.s); + if (d->relative.f) { + printf(" %6f", d->relative.f); + } if (d->relative.first_last_day_of != 0) { switch (d->relative.first_last_day_of) { case 1: diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h index 9a59d89770..5cd1fe6ebc 100644 --- a/ext/date/lib/timelib.h +++ b/ext/date/lib/timelib.h @@ -38,8 +38,8 @@ # define timelib_free free #endif -#define TIMELIB_VERSION 201602 -#define TIMELIB_ASCII_VERSION "2016.02" +#define TIMELIB_VERSION 201604 +#define TIMELIB_ASCII_VERSION "2016.04" #define TIMELIB_NONE 0x00 #define TIMELIB_OVERRIDE_TIME 0x01 @@ -139,6 +139,7 @@ void timelib_time_set_option(timelib_time* tm, int option, void* option_value); void timelib_time_dtor(timelib_time* t); timelib_time* timelib_time_clone(timelib_time* orig); int timelib_time_compare(timelib_time *t1, timelib_time *t2); +void timelib_set_fraction_from_timeval(timelib_time *t, struct timeval tp); timelib_time_offset* timelib_time_offset_ctor(void); void timelib_time_offset_dtor(timelib_time_offset* t); diff --git a/ext/date/lib/timelib.m4 b/ext/date/lib/timelib.m4 index c7255727f2..99bf9fad20 100644 --- a/ext/date/lib/timelib.m4 +++ b/ext/date/lib/timelib.m4 @@ -77,4 +77,4 @@ stdlib.h ]) dnl Check for strtoll, atoll -AC_CHECK_FUNCS(strtoll atoll strftime) +AC_CHECK_FUNCS(strtoll atoll strftime gettimeofday) diff --git a/ext/date/lib/timelib_structs.h b/ext/date/lib/timelib_structs.h index d38175753a..4256dd4f6f 100644 --- a/ext/date/lib/timelib_structs.h +++ b/ext/date/lib/timelib_structs.h @@ -125,7 +125,7 @@ typedef unsigned __int64 uint64_t; #include #endif -#if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64) +#if (defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)) && !defined(TIMELIB_FORCE_LONG32) typedef int64_t timelib_long; typedef uint64_t timelib_ulong; # define TIMELIB_LONG_MAX INT64_MAX @@ -216,6 +216,7 @@ typedef struct timelib_special { typedef struct timelib_rel_time { timelib_sll y, m, d; /* Years, Months and Days */ timelib_sll h, i, s; /* Hours, mInutes and Seconds */ + double f; /* Fraction */ int weekday; /* Stores the day in 'next monday' */ int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */ diff --git a/ext/date/lib/timezonemap.h b/ext/date/lib/timezonemap.h index 41471909ac..d8898bf33d 100644 --- a/ext/date/lib/timezonemap.h +++ b/ext/date/lib/timezonemap.h @@ -5,10 +5,16 @@ { "acdt", 1, 37800, "Australia/South" }, { "acdt", 1, 37800, "Australia/Yancowinna" }, { "acst", 1, -14400, "America/Porto_Acre" }, + { "acst", 0, 32400, "Australia/Adelaide" }, { "acst", 0, 34200, "Australia/Adelaide" }, { "acst", 1, -14400, "America/Eirunepe" }, { "acst", 1, -14400, "America/Rio_Branco" }, { "acst", 1, -14400, "Brazil/Acre" }, + { "acst", 0, 32400, "Australia/Broken_Hill" }, + { "acst", 0, 32400, "Australia/Darwin" }, + { "acst", 0, 32400, "Australia/North" }, + { "acst", 0, 32400, "Australia/South" }, + { "acst", 0, 32400, "Australia/Yancowinna" }, { "acst", 0, 34200, "Asia/Jayapura" }, { "acst", 0, 34200, "Australia/Broken_Hill" }, { "acst", 0, 34200, "Australia/Darwin" }, @@ -71,23 +77,16 @@ { "ahst", 0, -36000, "America/Atka" }, { "akdt", 1, -28800, "America/Anchorage" }, { "akdt", 1, -28800, "America/Juneau" }, + { "akdt", 1, -28800, "America/Metlakatla" }, { "akdt", 1, -28800, "America/Nome" }, { "akdt", 1, -28800, "America/Sitka" }, { "akdt", 1, -28800, "America/Yakutat" }, { "akst", 0, -32400, "America/Anchorage" }, { "akst", 0, -32400, "America/Juneau" }, + { "akst", 0, -32400, "America/Metlakatla" }, { "akst", 0, -32400, "America/Nome" }, { "akst", 0, -32400, "America/Sitka" }, { "akst", 0, -32400, "America/Yakutat" }, - { "aktst", 1, 21600, "Asia/Aqtobe" }, - { "aktt", 0, 21600, "Asia/Aqtobe" }, - { "aktt", 0, 14400, "Asia/Aqtobe" }, - { "aktt", 0, 18000, "Asia/Aqtobe" }, - { "almst", 1, 25200, "Asia/Almaty" }, - { "almt", 0, 21600, "Asia/Almaty" }, - { "almt", 0, 18000, "Asia/Almaty" }, - { "amst", 1, 18000, "Asia/Yerevan" }, - { "amst", 1, 14400, "Asia/Yerevan" }, { "amst", 1, -10800, "America/Boa_Vista" }, { "amst", 1, -10800, "America/Campo_Grande" }, { "amst", 1, -10800, "America/Cuiaba" }, @@ -95,8 +94,6 @@ { "amst", 1, -10800, "America/Porto_Velho" }, { "amst", 1, -10800, "America/Santarem" }, { "amst", 1, -10800, "Brazil/West" }, - { "amt", 0, 14400, "Asia/Yerevan" }, - { "amt", 0, 10800, "Asia/Yerevan" }, { "amt", 0, -13840, "America/Asuncion" }, { "amt", 0, -14400, "America/Boa_Vista" }, { "amt", 0, -14400, "America/Campo_Grande" }, @@ -111,12 +108,6 @@ { "amt", 0, -14400, "Brazil/West" }, { "amt", 0, 1172, "Europe/Amsterdam" }, { "amt", 0, 5692, "Europe/Athens" }, - { "anast", 1, 50400, "Asia/Anadyr" }, - { "anast", 1, 43200, "Asia/Anadyr" }, - { "anast", 1, 46800, "Asia/Anadyr" }, - { "anat", 0, 46800, "Asia/Anadyr" }, - { "anat", 0, 39600, "Asia/Anadyr" }, - { "anat", 0, 43200, "Asia/Anadyr" }, { "ant", 0, -16200, "America/Curacao" }, { "ant", 0, -16200, "America/Aruba" }, { "ant", 0, -16200, "America/Kralendijk" }, @@ -128,12 +119,6 @@ { "apt", 1, -10800, "America/Pangnirtung" }, { "apt", 1, -10800, "America/Puerto_Rico" }, { "apt", 1, -10800, "Canada/Atlantic" }, - { "aqtst", 1, 21600, "Asia/Aqtau" }, - { "aqtst", 1, 18000, "Asia/Aqtau" }, - { "aqtst", 1, 21600, "Asia/Aqtobe" }, - { "aqtt", 0, 18000, "Asia/Aqtau" }, - { "aqtt", 0, 14400, "Asia/Aqtau" }, - { "aqtt", 0, 18000, "Asia/Aqtobe" }, { "arst", 1, -7200, "America/Buenos_Aires" }, { "arst", 1, -10800, "America/Buenos_Aires" }, { "arst", 1, -10800, "America/Argentina/Buenos_Aires" }, @@ -214,14 +199,6 @@ { "art", 0, -14400, "America/Mendoza" }, { "art", 0, -14400, "America/Rosario" }, { "art", 0, -14400, "Antarctica/Palmer" }, - { "ashst", 1, 21600, "Asia/Ashkhabad" }, - { "ashst", 1, 18000, "Asia/Ashkhabad" }, - { "ashst", 1, 18000, "Asia/Ashgabat" }, - { "ashst", 1, 21600, "Asia/Ashgabat" }, - { "asht", 0, 18000, "Asia/Ashkhabad" }, - { "asht", 0, 14400, "Asia/Ashkhabad" }, - { "asht", 0, 14400, "Asia/Ashgabat" }, - { "asht", 0, 18000, "Asia/Ashgabat" }, { "ast", 0, 10800, "Asia/Riyadh" }, { "ast", 0, -14400, "America/Anguilla" }, { "ast", 0, -14400, "America/Antigua" }, @@ -265,7 +242,6 @@ { "awdt", 1, 32400, "Australia/Perth" }, { "awdt", 1, 32400, "Australia/West" }, { "awst", 0, 28800, "Australia/Perth" }, - { "awst", 0, 28800, "Antarctica/Casey" }, { "awst", 0, 28800, "Australia/West" }, { "awt", 1, -10800, "America/Halifax" }, { "awt", 1, -10800, "America/Blanc-Sablon" }, @@ -279,14 +255,6 @@ { "azost", 1, -3600, "Atlantic/Azores" }, { "azot", 0, -3600, "Atlantic/Azores" }, { "azot", 0, -7200, "Atlantic/Azores" }, - { "azst", 1, 18000, "Asia/Baku" }, - { "azst", 1, 14400, "Asia/Baku" }, - { "azt", 0, 14400, "Asia/Baku" }, - { "azt", 0, 10800, "Asia/Baku" }, - { "bakst", 1, 18000, "Asia/Baku" }, - { "bakst", 1, 14400, "Asia/Baku" }, - { "bakt", 0, 14400, "Asia/Baku" }, - { "bakt", 0, 10800, "Asia/Baku" }, { "bdst", 1, 7200, "Europe/London" }, { "bdst", 1, 25200, "Asia/Dacca" }, { "bdst", 1, 25200, "Asia/Dhaka" }, @@ -326,7 +294,11 @@ { "bmt", 0, -14309, "America/Barbados" }, { "bmt", 0, 6264, "Europe/Tiraspol" }, { "bmt", 0, -17776, "America/Bogota" }, + { "bmt", 0, 1050, "Europe/Brussels" }, { "bmt", 0, 10656, "Asia/Baghdad" }, + { "bmt", 0, 1786, "Europe/Busingen" }, + { "bmt", 0, 1786, "Europe/Vaduz" }, + { "bmt", 0, 1786, "Europe/Zurich" }, { "bmt", 0, 24124, "Asia/Bangkok" }, { "bmt", 0, 24124, "Asia/Phnom_Penh" }, { "bmt", 0, 24124, "Asia/Vientiane" }, @@ -385,12 +357,12 @@ { "burt", 0, 23400, "Asia/Dacca" }, { "burt", 0, 23400, "Asia/Dhaka" }, { "burt", 0, 23400, "Asia/Rangoon" }, + { "burt", 0, 23400, "Asia/Yangon" }, { "cant", 0, -3600, "Atlantic/Canary" }, { "capt", 1, -32400, "America/Anchorage" }, { "cast", 0, 34200, "Australia/Adelaide" }, { "cast", 1, 10800, "Africa/Juba" }, { "cast", 1, 10800, "Africa/Khartoum" }, - { "cast", 0, 39600, "Antarctica/Casey" }, { "cat", 0, -36000, "America/Anchorage" }, { "cat", 0, 7200, "Africa/Khartoum" }, { "cat", 0, 7200, "Africa/Blantyre" }, @@ -466,7 +438,6 @@ { "cest", 1, 7200, "Africa/Ceuta" }, { "cest", 1, 7200, "Africa/Tripoli" }, { "cest", 1, 7200, "Africa/Tunis" }, - { "cest", 1, 7200, "Antarctica/Troll" }, { "cest", 1, 7200, "Arctic/Longyearbyen" }, { "cest", 1, 7200, "Atlantic/Jan_Mayen" }, { "cest", 1, 7200, "Europe/Amsterdam" }, @@ -588,10 +559,7 @@ { "clst", 1, -10800, "Chile/Continental" }, { "clst", 1, -14400, "Chile/Continental" }, { "clt", 0, -14400, "America/Santiago" }, - { "clt", 0, -10800, "America/Santiago" }, { "clt", 0, -18000, "America/Santiago" }, - { "clt", 0, -10800, "Antarctica/Palmer" }, - { "clt", 0, -10800, "Chile/Continental" }, { "clt", 0, -14400, "Antarctica/Palmer" }, { "clt", 0, -14400, "Chile/Continental" }, { "clt", 0, -18000, "Chile/Continental" }, @@ -618,6 +586,7 @@ { "cmt", 0, -16356, "America/La_Paz" }, { "cmt", 0, -19176, "America/Cayman" }, { "cmt", 0, -19176, "America/Panama" }, + { "cmt", 0, 3020, "Europe/Copenhagen" }, { "cmt", 0, 6900, "Europe/Chisinau" }, { "cmt", 0, 6900, "Europe/Tiraspol" }, { "cost", 1, -14400, "America/Bogota" }, @@ -738,22 +707,13 @@ { "chst", 0, 36000, "Pacific/Saipan" }, { "dact", 0, 21600, "Asia/Dacca" }, { "dact", 0, 21600, "Asia/Dhaka" }, - { "davt", 0, 25200, "Antarctica/Davis" }, - { "davt", 0, 18000, "Antarctica/Davis" }, - { "ddut", 0, 36000, "Antarctica/DumontDUrville" }, { "dmt", 0, -1521, "Europe/Dublin" }, - { "dusst", 1, 25200, "Asia/Dushanbe" }, - { "dusst", 1, 21600, "Asia/Dushanbe" }, - { "dust", 0, 21600, "Asia/Dushanbe" }, - { "dust", 0, 18000, "Asia/Dushanbe" }, { "easst", 1, -21600, "Chile/EasterIsland" }, { "easst", 1, -18000, "Chile/EasterIsland" }, { "easst", 1, -18000, "Pacific/Easter" }, { "easst", 1, -21600, "Pacific/Easter" }, - { "east", 0, -18000, "Chile/EasterIsland" }, { "east", 0, -21600, "Chile/EasterIsland" }, { "east", 0, -25200, "Chile/EasterIsland" }, - { "east", 0, -18000, "Pacific/Easter" }, { "east", 0, -21600, "Pacific/Easter" }, { "east", 0, -25200, "Pacific/Easter" }, { "eat", 0, 10800, "Africa/Khartoum" }, @@ -819,7 +779,6 @@ { "eest", 1, 10800, "Europe/Moscow" }, { "eest", 1, 10800, "Europe/Nicosia" }, { "eest", 1, 10800, "Europe/Riga" }, - { "eest", 1, 10800, "Europe/Samara" }, { "eest", 1, 10800, "Europe/Simferopol" }, { "eest", 1, 10800, "Europe/Sofia" }, { "eest", 1, 10800, "Europe/Tallinn" }, @@ -921,8 +880,6 @@ { "ewt", 1, -14400, "America/Thunder_Bay" }, { "ewt", 1, -14400, "America/Toronto" }, { "ewt", 1, -14400, "Canada/Eastern" }, - { "fet", 0, 10800, "Europe/Kaliningrad" }, - { "fet", 0, 10800, "Europe/Minsk" }, { "ffmt", 0, -14660, "America/Martinique" }, { "fjst", 1, 46800, "Pacific/Fiji" }, { "fjt", 0, 43200, "Pacific/Fiji" }, @@ -936,19 +893,9 @@ { "fnst", 1, -3600, "Brazil/DeNoronha" }, { "fnt", 0, -7200, "America/Noronha" }, { "fnt", 0, -7200, "Brazil/DeNoronha" }, - { "fort", 0, 18000, "Asia/Aqtau" }, - { "fort", 0, 14400, "Asia/Aqtau" }, - { "frust", 1, 25200, "Asia/Bishkek" }, - { "frust", 1, 21600, "Asia/Bishkek" }, - { "frut", 0, 21600, "Asia/Bishkek" }, - { "frut", 0, 18000, "Asia/Bishkek" }, { "galt", 0, -21600, "Pacific/Galapagos" }, { "gamt", 0, -32400, "Pacific/Gambier" }, { "gbgt", 0, -13500, "America/Guyana" }, - { "gest", 1, 14400, "Asia/Tbilisi" }, - { "gest", 1, 18000, "Asia/Tbilisi" }, - { "get", 0, 14400, "Asia/Tbilisi" }, - { "get", 0, 10800, "Asia/Tbilisi" }, { "gft", 0, -14400, "America/Cayenne" }, { "gft", 0, -10800, "America/Cayenne" }, { "ghst", 1, 1200, "Africa/Accra" }, @@ -990,11 +937,9 @@ { "gyt", 0, -14400, "America/Guyana" }, { "gyt", 0, -10800, "America/Guyana" }, { "gyt", 0, -13500, "America/Guyana" }, - { "hadt", 1, -32400, "America/Adak" }, - { "hadt", 1, -32400, "America/Atka" }, - { "hast", 0, -36000, "America/Adak" }, - { "hast", 0, -36000, "America/Atka" }, { "hdt", 1, -34200, "Pacific/Honolulu" }, + { "hdt", 1, -32400, "America/Adak" }, + { "hdt", 1, -32400, "America/Atka" }, { "hdt", 1, -34200, "Pacific/Johnston" }, { "hkst", 1, 32400, "Asia/Hong_Kong" }, { "hkt", 0, 28800, "Asia/Hong_Kong" }, @@ -1011,6 +956,8 @@ { "hovt", 0, 21600, "Asia/Hovd" }, { "hst", 0, -36000, "Pacific/Honolulu" }, { "hst", 0, -37800, "Pacific/Honolulu" }, + { "hst", 0, -36000, "America/Adak" }, + { "hst", 0, -36000, "America/Atka" }, { "hst", 0, -36000, "Pacific/Johnston" }, { "hst", 0, -37800, "Pacific/Johnston" }, { "ict", 0, 25200, "Asia/Bangkok" }, @@ -1030,16 +977,11 @@ { "imt", 0, 25025, "Asia/Irkutsk" }, { "imt", 0, 7016, "Asia/Istanbul" }, { "imt", 0, 7016, "Europe/Istanbul" }, + { "imt", 0, 7016, "Europe/Sofia" }, { "iot", 0, 21600, "Indian/Chagos" }, { "iot", 0, 18000, "Indian/Chagos" }, { "irdt", 1, 16200, "Asia/Tehran" }, { "irdt", 1, 18000, "Asia/Tehran" }, - { "irkst", 1, 32400, "Asia/Irkutsk" }, - { "irkst", 1, 28800, "Asia/Irkutsk" }, - { "irkt", 0, 28800, "Asia/Irkutsk" }, - { "irkt", 0, 25200, "Asia/Irkutsk" }, - { "irkt", 0, 32400, "Asia/Irkutsk" }, - { "irkt", 0, 28800, "Asia/Chita" }, { "irst", 0, 12600, "Asia/Tehran" }, { "irst", 0, 14400, "Asia/Tehran" }, { "isst", 1, 0, "Atlantic/Reykjavik" }, @@ -1067,7 +1009,6 @@ { "ist", 0, 7200, "Asia/Tel_Aviv" }, { "javt", 0, 26400, "Asia/Jakarta" }, { "jcst", 0, 32400, "Asia/Pyongyang" }, - { "jcst", 0, 32400, "Asia/Sakhalin" }, { "jcst", 0, 32400, "Asia/Seoul" }, { "jcst", 0, 32400, "Asia/Tokyo" }, { "jcst", 0, 32400, "ROK" }, @@ -1087,11 +1028,11 @@ { "jst", 0, 32400, "Asia/Pyongyang" }, { "jst", 0, 32400, "Asia/Rangoon" }, { "jst", 0, 32400, "Asia/Saigon" }, - { "jst", 0, 32400, "Asia/Sakhalin" }, { "jst", 0, 32400, "Asia/Seoul" }, { "jst", 0, 32400, "Asia/Singapore" }, { "jst", 0, 32400, "Asia/Taipei" }, { "jst", 0, 32400, "Asia/Ujung_Pandang" }, + { "jst", 0, 32400, "Asia/Yangon" }, { "jst", 0, 32400, "Pacific/Bougainville" }, { "jst", 0, 32400, "Pacific/Nauru" }, { "jst", 0, 32400, "ROC" }, @@ -1103,37 +1044,18 @@ { "kdt", 1, 34200, "Asia/Seoul" }, { "kdt", 1, 34200, "ROK" }, { "kdt", 1, 36000, "ROK" }, - { "kgst", 1, 21600, "Asia/Bishkek" }, - { "kgt", 0, 18000, "Asia/Bishkek" }, - { "kgt", 0, 21600, "Asia/Bishkek" }, - { "kizst", 1, 21600, "Asia/Qyzylorda" }, - { "kizt", 0, 21600, "Asia/Qyzylorda" }, - { "kizt", 0, 14400, "Asia/Qyzylorda" }, - { "kizt", 0, 18000, "Asia/Qyzylorda" }, { "kmt", 0, 5736, "Europe/Vilnius" }, { "kmt", 0, -18431, "America/Grand_Turk" }, { "kmt", 0, -18431, "America/Jamaica" }, { "kmt", 0, 7324, "Europe/Kiev" }, { "kost", 0, 43200, "Pacific/Kosrae" }, { "kost", 0, 39600, "Pacific/Kosrae" }, - { "krast", 1, 28800, "Asia/Krasnoyarsk" }, - { "krast", 1, 25200, "Asia/Krasnoyarsk" }, - { "krast", 1, 25200, "Asia/Novokuznetsk" }, - { "krast", 1, 28800, "Asia/Novokuznetsk" }, - { "krat", 0, 25200, "Asia/Krasnoyarsk" }, - { "krat", 0, 21600, "Asia/Krasnoyarsk" }, - { "krat", 0, 28800, "Asia/Krasnoyarsk" }, - { "krat", 0, 21600, "Asia/Novokuznetsk" }, - { "krat", 0, 25200, "Asia/Novokuznetsk" }, { "kst", 0, 30600, "Asia/Seoul" }, { "kst", 0, 32400, "Asia/Pyongyang" }, { "kst", 0, 32400, "Asia/Seoul" }, { "kst", 0, 30600, "Asia/Pyongyang" }, { "kst", 0, 30600, "ROK" }, { "kst", 0, 32400, "ROK" }, - { "kuyst", 1, 18000, "Europe/Samara" }, - { "kuyt", 0, 14400, "Europe/Samara" }, - { "kuyt", 0, 10800, "Europe/Samara" }, { "kwat", 0, -43200, "Pacific/Kwajalein" }, { "lhdt", 1, 39600, "Australia/LHI" }, { "lhdt", 1, 39600, "Australia/Lord_Howe" }, @@ -1151,21 +1073,6 @@ { "madmt", 1, 3600, "Atlantic/Madeira" }, { "madst", 1, 0, "Atlantic/Madeira" }, { "madt", 0, -3600, "Atlantic/Madeira" }, - { "magst", 1, 43200, "Asia/Magadan" }, - { "magst", 1, 39600, "Asia/Magadan" }, - { "magst", 1, 39600, "Asia/Srednekolymsk" }, - { "magst", 1, 39600, "Asia/Ust-Nera" }, - { "magst", 1, 43200, "Asia/Srednekolymsk" }, - { "magst", 1, 43200, "Asia/Ust-Nera" }, - { "magt", 0, 36000, "Asia/Magadan" }, - { "magt", 0, 39600, "Asia/Magadan" }, - { "magt", 0, 43200, "Asia/Magadan" }, - { "magt", 0, 36000, "Asia/Srednekolymsk" }, - { "magt", 0, 36000, "Asia/Ust-Nera" }, - { "magt", 0, 39600, "Asia/Srednekolymsk" }, - { "magt", 0, 39600, "Asia/Ust-Nera" }, - { "magt", 0, 43200, "Asia/Srednekolymsk" }, - { "magt", 0, 43200, "Asia/Ust-Nera" }, { "malst", 1, 26400, "Asia/Singapore" }, { "malst", 1, 26400, "Asia/Kuala_Lumpur" }, { "malt", 0, 27000, "Asia/Singapore" }, @@ -1175,8 +1082,6 @@ { "malt", 0, 26400, "Asia/Kuala_Lumpur" }, { "malt", 0, 27000, "Asia/Kuala_Lumpur" }, { "mart", 0, -34200, "Pacific/Marquesas" }, - { "mawt", 0, 21600, "Antarctica/Mawson" }, - { "mawt", 0, 18000, "Antarctica/Mawson" }, { "mddt", 1, -18000, "America/Cambridge_Bay" }, { "mddt", 1, -18000, "America/Yellowknife" }, { "mdst", 1, 16279, "Europe/Moscow" }, @@ -1202,6 +1107,8 @@ { "mdt", 1, -21600, "Canada/Mountain" }, { "mdt", 1, -21600, "Canada/Saskatchewan" }, { "mdt", 1, -21600, "Mexico/BajaSur" }, + { "mest", 1, 7200, "MET" }, + { "met", 0, 3600, "MET" }, { "mht", 0, 43200, "Pacific/Kwajalein" }, { "mht", 0, 39600, "Pacific/Kwajalein" }, { "mht", 0, 39600, "Pacific/Majuro" }, @@ -1215,6 +1122,7 @@ { "mmt", 0, 17640, "Indian/Maldives" }, { "mmt", 0, 19172, "Asia/Colombo" }, { "mmt", 0, 23400, "Asia/Rangoon" }, + { "mmt", 0, 23400, "Asia/Yangon" }, { "mmt", 0, 28656, "Asia/Makassar" }, { "mmt", 0, 28656, "Asia/Ujung_Pandang" }, { "mmt", 0, 6600, "Europe/Minsk" }, @@ -1242,13 +1150,11 @@ { "msd", 1, 14400, "Europe/Kiev" }, { "msd", 1, 14400, "Europe/Minsk" }, { "msd", 1, 14400, "Europe/Riga" }, - { "msd", 1, 14400, "Europe/Samara" }, { "msd", 1, 14400, "Europe/Simferopol" }, { "msd", 1, 14400, "Europe/Tallinn" }, { "msd", 1, 14400, "Europe/Tiraspol" }, { "msd", 1, 14400, "Europe/Uzhgorod" }, { "msd", 1, 14400, "Europe/Vilnius" }, - { "msd", 1, 14400, "Europe/Volgograd" }, { "msd", 1, 14400, "Europe/Zaporozhye" }, { "msk", 0, 10800, "Europe/Moscow" }, { "msk", 0, 14400, "Europe/Moscow" }, @@ -1257,17 +1163,13 @@ { "msk", 0, 10800, "Europe/Kiev" }, { "msk", 0, 10800, "Europe/Minsk" }, { "msk", 0, 10800, "Europe/Riga" }, - { "msk", 0, 10800, "Europe/Samara" }, { "msk", 0, 10800, "Europe/Simferopol" }, { "msk", 0, 10800, "Europe/Tallinn" }, { "msk", 0, 10800, "Europe/Tiraspol" }, { "msk", 0, 10800, "Europe/Uzhgorod" }, { "msk", 0, 10800, "Europe/Vilnius" }, - { "msk", 0, 10800, "Europe/Volgograd" }, { "msk", 0, 10800, "Europe/Zaporozhye" }, { "msk", 0, 14400, "Europe/Simferopol" }, - { "msk", 0, 14400, "Europe/Volgograd" }, - { "msm", 1, 18000, "Europe/Moscow" }, { "mst", 0, -25200, "America/Denver" }, { "mst", 0, -25200, "America/Bahia_Banderas" }, { "mst", 0, -25200, "America/Boise" }, @@ -1277,6 +1179,7 @@ { "mst", 0, -25200, "America/Dawson_Creek" }, { "mst", 0, -25200, "America/Edmonton" }, { "mst", 0, -25200, "America/Ensenada" }, + { "mst", 0, -25200, "America/Fort_Nelson" }, { "mst", 0, -25200, "America/Hermosillo" }, { "mst", 0, -25200, "America/Inuvik" }, { "mst", 0, -25200, "America/Mazatlan" }, @@ -1332,15 +1235,10 @@ { "negt", 0, -12600, "America/Paramaribo" }, { "nest", 1, 4800, "Europe/Amsterdam" }, { "net", 0, 1200, "Europe/Amsterdam" }, + { "nfst", 1, 45000, "Pacific/Norfolk" }, { "nft", 0, 41400, "Pacific/Norfolk" }, + { "nft", 0, 39600, "Pacific/Norfolk" }, { "nmt", 0, 40320, "Pacific/Norfolk" }, - { "novst", 1, 25200, "Asia/Novosibirsk" }, - { "novst", 1, 28800, "Asia/Novosibirsk" }, - { "novst", 1, 25200, "Asia/Novokuznetsk" }, - { "novt", 0, 21600, "Asia/Novosibirsk" }, - { "novt", 0, 25200, "Asia/Novosibirsk" }, - { "novt", 0, 21600, "Asia/Novokuznetsk" }, - { "novt", 0, 25200, "Asia/Novokuznetsk" }, { "npt", 1, -9000, "America/St_Johns" }, { "npt", 0, 20700, "Asia/Katmandu" }, { "npt", 1, -36000, "America/Adak" }, @@ -1393,20 +1291,13 @@ { "nzst", 1, 45000, "Antarctica/McMurdo" }, { "nzst", 1, 45000, "Antarctica/South_Pole" }, { "nzst", 1, 45000, "NZ" }, - { "omsst", 1, 25200, "Asia/Omsk" }, - { "omsst", 1, 21600, "Asia/Omsk" }, - { "omst", 0, 21600, "Asia/Omsk" }, - { "omst", 0, 18000, "Asia/Omsk" }, - { "omst", 0, 25200, "Asia/Omsk" }, - { "orast", 1, 18000, "Asia/Oral" }, - { "orat", 0, 18000, "Asia/Oral" }, - { "orat", 0, 14400, "Asia/Oral" }, { "pddt", 1, -21600, "America/Inuvik" }, { "pdt", 1, -25200, "America/Los_Angeles" }, { "pdt", 1, -25200, "America/Boise" }, { "pdt", 1, -25200, "America/Dawson" }, { "pdt", 1, -25200, "America/Dawson_Creek" }, { "pdt", 1, -25200, "America/Ensenada" }, + { "pdt", 1, -25200, "America/Fort_Nelson" }, { "pdt", 1, -25200, "America/Juneau" }, { "pdt", 1, -25200, "America/Metlakatla" }, { "pdt", 1, -25200, "America/Santa_Isabel" }, @@ -1418,10 +1309,6 @@ { "pdt", 1, -25200, "Canada/Yukon" }, { "pdt", 1, -25200, "Mexico/BajaNorte" }, { "pest", 1, -14400, "America/Lima" }, - { "petst", 1, 46800, "Asia/Kamchatka" }, - { "petst", 1, 43200, "Asia/Kamchatka" }, - { "pett", 0, 43200, "Asia/Kamchatka" }, - { "pett", 0, 39600, "Asia/Kamchatka" }, { "pet", 0, -18000, "America/Lima" }, { "pgt", 0, 36000, "Pacific/Bougainville" }, { "pgt", 0, 36000, "Pacific/Port_Moresby" }, @@ -1435,12 +1322,14 @@ { "plmt", 0, 25590, "Asia/Ho_Chi_Minh" }, { "plmt", 0, 25590, "Asia/Saigon" }, { "pmdt", 1, -7200, "America/Miquelon" }, + { "pmmt", 0, 35312, "Pacific/Bougainville" }, { "pmst", 0, -10800, "America/Miquelon" }, { "pmt", 0, -13236, "America/Paramaribo" }, { "pmt", 0, -13252, "America/Paramaribo" }, - { "pmt", 0, 36000, "Antarctica/DumontDUrville" }, { "pmt", 0, 13505, "Asia/Yekaterinburg" }, { "pmt", 0, 26240, "Asia/Pontianak" }, + { "pmt", 0, 3464, "Europe/Bratislava" }, + { "pmt", 0, 3464, "Europe/Prague" }, { "pmt", 0, 561, "Africa/Algiers" }, { "pmt", 0, 561, "Africa/Tunis" }, { "pmt", 0, 561, "Europe/Monaco" }, @@ -1452,6 +1341,7 @@ { "ppt", 1, -25200, "America/Los_Angeles" }, { "ppt", 1, -25200, "America/Dawson_Creek" }, { "ppt", 1, -25200, "America/Ensenada" }, + { "ppt", 1, -25200, "America/Fort_Nelson" }, { "ppt", 1, -25200, "America/Juneau" }, { "ppt", 1, -25200, "America/Metlakatla" }, { "ppt", 1, -25200, "America/Santa_Isabel" }, @@ -1467,6 +1357,7 @@ { "pst", 0, -28800, "America/Dawson" }, { "pst", 0, -28800, "America/Dawson_Creek" }, { "pst", 0, -28800, "America/Ensenada" }, + { "pst", 0, -28800, "America/Fort_Nelson" }, { "pst", 0, -28800, "America/Hermosillo" }, { "pst", 0, -28800, "America/Inuvik" }, { "pst", 0, -28800, "America/Juneau" }, @@ -1485,6 +1376,7 @@ { "pwt", 1, -25200, "America/Los_Angeles" }, { "pwt", 1, -25200, "America/Dawson_Creek" }, { "pwt", 1, -25200, "America/Ensenada" }, + { "pwt", 1, -25200, "America/Fort_Nelson" }, { "pwt", 1, -25200, "America/Juneau" }, { "pwt", 1, -25200, "America/Metlakatla" }, { "pwt", 1, -25200, "America/Santa_Isabel" }, @@ -1498,24 +1390,13 @@ { "pyt", 0, -14400, "America/Asuncion" }, { "pyt", 0, -10800, "America/Asuncion" }, { "qmt", 0, -18840, "America/Guayaquil" }, - { "qyzst", 1, 25200, "Asia/Qyzylorda" }, - { "qyzt", 0, 21600, "Asia/Qyzylorda" }, - { "qyzt", 0, 18000, "Asia/Qyzylorda" }, { "ret", 0, 14400, "Indian/Reunion" }, { "rmt", 0, 5794, "Europe/Riga" }, { "rmt", 0, 23080, "Asia/Rangoon" }, - { "rott", 0, -10800, "Antarctica/Rothera" }, - { "sakst", 1, 39600, "Asia/Sakhalin" }, - { "sakst", 1, 43200, "Asia/Sakhalin" }, - { "sakt", 0, 36000, "Asia/Sakhalin" }, - { "sakt", 0, 39600, "Asia/Sakhalin" }, - { "samst", 1, 21600, "Asia/Samarkand" }, - { "samst", 1, 14400, "Europe/Samara" }, - { "samst", 1, 18000, "Europe/Samara" }, - { "samt", 0, 18000, "Asia/Samarkand" }, - { "samt", 0, 14400, "Asia/Samarkand" }, - { "samt", 0, 10800, "Europe/Samara" }, - { "samt", 0, 14400, "Europe/Samara" }, + { "rmt", 0, 23080, "Asia/Yangon" }, + { "rmt", 0, 2996, "Europe/Rome" }, + { "rmt", 0, 2996, "Europe/San_Marino" }, + { "rmt", 0, 2996, "Europe/Vatican" }, { "sast", 0, 7200, "Africa/Johannesburg" }, { "sast", 1, 10800, "Africa/Johannesburg" }, { "sast", 0, 5400, "Africa/Johannesburg" }, @@ -1531,11 +1412,9 @@ { "sct", 0, 14400, "Indian/Mahe" }, { "sdmt", 0, -16800, "America/Santo_Domingo" }, { "sdt", 1, -36000, "Pacific/Apia" }, + { "set", 0, 3614, "Europe/Stockholm" }, { "sgt", 0, 28800, "Asia/Singapore" }, { "sgt", 0, 27000, "Asia/Singapore" }, - { "shest", 1, 21600, "Asia/Aqtau" }, - { "shet", 0, 21600, "Asia/Aqtau" }, - { "shet", 0, 18000, "Asia/Aqtau" }, { "sjmt", 0, -20173, "America/Costa_Rica" }, { "smt", 0, -13884, "Atlantic/Stanley" }, { "smt", 0, -16966, "America/Santiago" }, @@ -1543,53 +1422,24 @@ { "smt", 0, 24925, "Asia/Kuala_Lumpur" }, { "smt", 0, 24925, "Asia/Singapore" }, { "smt", 0, 8160, "Europe/Simferopol" }, - { "sret", 0, 39600, "Asia/Srednekolymsk" }, { "srt", 0, -10800, "America/Paramaribo" }, { "srt", 0, -12600, "America/Paramaribo" }, { "sst", 0, -39600, "Pacific/Samoa" }, { "sst", 0, -39600, "Pacific/Apia" }, { "sst", 0, -39600, "Pacific/Midway" }, { "sst", 0, -39600, "Pacific/Pago_Pago" }, - { "stat", 0, 10800, "Europe/Volgograd" }, - { "stat", 0, 14400, "Europe/Volgograd" }, - { "svest", 1, 21600, "Asia/Yekaterinburg" }, - { "svest", 1, 18000, "Asia/Yekaterinburg" }, - { "svet", 0, 18000, "Asia/Yekaterinburg" }, - { "svet", 0, 14400, "Asia/Yekaterinburg" }, { "swat", 0, 5400, "Africa/Windhoek" }, - { "syot", 0, 10800, "Antarctica/Syowa" }, { "taht", 0, -36000, "Pacific/Tahiti" }, - { "tasst", 1, 25200, "Asia/Samarkand" }, - { "tasst", 1, 21600, "Asia/Tashkent" }, - { "tasst", 1, 25200, "Asia/Tashkent" }, - { "tast", 0, 21600, "Asia/Samarkand" }, - { "tast", 0, 18000, "Asia/Tashkent" }, - { "tast", 0, 21600, "Asia/Tashkent" }, - { "tbist", 1, 18000, "Asia/Tbilisi" }, - { "tbist", 1, 14400, "Asia/Tbilisi" }, - { "tbit", 0, 14400, "Asia/Tbilisi" }, - { "tbit", 0, 10800, "Asia/Tbilisi" }, { "tbmt", 0, 10751, "Asia/Tbilisi" }, - { "tft", 0, 18000, "Indian/Kerguelen" }, - { "tjt", 0, 18000, "Asia/Dushanbe" }, { "tkt", 0, -39600, "Pacific/Fakaofo" }, { "tkt", 0, 46800, "Pacific/Fakaofo" }, { "tlt", 0, 32400, "Asia/Dili" }, { "tlt", 0, 28800, "Asia/Dili" }, { "tmt", 0, 12344, "Asia/Tehran" }, { "tmt", 0, 5940, "Europe/Tallinn" }, - { "tmt", 0, 14400, "Asia/Ashgabat" }, - { "tmt", 0, 14400, "Asia/Ashkhabad" }, - { "tmt", 0, 18000, "Asia/Ashgabat" }, - { "tmt", 0, 18000, "Asia/Ashkhabad" }, { "tost", 1, 50400, "Pacific/Tongatapu" }, { "tot", 0, 46800, "Pacific/Tongatapu" }, { "tot", 0, 44400, "Pacific/Tongatapu" }, - { "trst", 1, 14400, "Europe/Istanbul" }, - { "trst", 1, 14400, "Asia/Istanbul" }, - { "trt", 0, 10800, "Europe/Istanbul" }, - { "trt", 0, 10800, "Asia/Istanbul" }, - { "tsat", 0, 10800, "Europe/Volgograd" }, { "tvt", 0, 43200, "Pacific/Funafuti" }, { "uct", 0, 0, "Etc/UCT" }, { "ulast", 1, 32400, "Asia/Ulaanbaatar" }, @@ -1600,12 +1450,6 @@ { "ulat", 0, 25200, "Asia/Ulan_Bator" }, { "ulat", 0, 28800, "Asia/Choibalsan" }, { "ulat", 0, 28800, "Asia/Ulan_Bator" }, - { "urast", 1, 21600, "Asia/Oral" }, - { "urast", 1, 18000, "Asia/Oral" }, - { "urat", 0, 21600, "Asia/Oral" }, - { "urat", 0, 14400, "Asia/Oral" }, - { "urat", 0, 18000, "Asia/Oral" }, - { "utc", 0, 0, "Antarctica/Troll" }, { "utc", 0, 0, "Etc/Universal" }, { "utc", 0, 0, "Etc/UTC" }, { "utc", 0, 0, "Etc/Zulu" }, @@ -1616,27 +1460,8 @@ { "uyst", 1, -7200, "America/Montevideo" }, { "uyt", 0, -10800, "America/Montevideo" }, { "uyt", 0, -12600, "America/Montevideo" }, - { "uzst", 1, 21600, "Asia/Samarkand" }, - { "uzst", 1, 21600, "Asia/Tashkent" }, - { "uzt", 0, 18000, "Asia/Samarkand" }, - { "uzt", 0, 18000, "Asia/Tashkent" }, { "vet", 0, -16200, "America/Caracas" }, { "vet", 0, -14400, "America/Caracas" }, - { "vlast", 1, 39600, "Asia/Vladivostok" }, - { "vlast", 1, 36000, "Asia/Vladivostok" }, - { "vlast", 1, 39600, "Asia/Khandyga" }, - { "vlat", 0, 36000, "Asia/Vladivostok" }, - { "vlat", 0, 32400, "Asia/Vladivostok" }, - { "vlat", 0, 39600, "Asia/Vladivostok" }, - { "vlat", 0, 36000, "Asia/Khandyga" }, - { "vlat", 0, 36000, "Asia/Ust-Nera" }, - { "vlat", 0, 39600, "Asia/Khandyga" }, - { "vlat", 0, 39600, "Asia/Ust-Nera" }, - { "volst", 1, 14400, "Europe/Volgograd" }, - { "volst", 1, 18000, "Europe/Volgograd" }, - { "volt", 0, 10800, "Europe/Volgograd" }, - { "volt", 0, 14400, "Europe/Volgograd" }, - { "vost", 0, 21600, "Antarctica/Vostok" }, { "vust", 1, 43200, "Pacific/Efate" }, { "vut", 0, 39600, "Pacific/Efate" }, { "wakt", 0, 43200, "Pacific/Wake" }, @@ -1737,23 +1562,6 @@ { "wsst", 0, 46800, "Pacific/Apia" }, { "xjt", 0, 21600, "Asia/Kashgar" }, { "xjt", 0, 21600, "Asia/Urumqi" }, - { "yakst", 1, 36000, "Asia/Yakutsk" }, - { "yakst", 1, 32400, "Asia/Yakutsk" }, - { "yakst", 1, 32400, "Asia/Chita" }, - { "yakst", 1, 32400, "Asia/Khandyga" }, - { "yakst", 1, 36000, "Asia/Chita" }, - { "yakst", 1, 36000, "Asia/Khandyga" }, - { "yakt", 0, 32400, "Asia/Yakutsk" }, - { "yakt", 0, 28800, "Asia/Yakutsk" }, - { "yakt", 0, 36000, "Asia/Yakutsk" }, - { "yakt", 0, 28800, "Asia/Chita" }, - { "yakt", 0, 28800, "Asia/Khandyga" }, - { "yakt", 0, 28800, "Asia/Ust-Nera" }, - { "yakt", 0, 32400, "Asia/Chita" }, - { "yakt", 0, 32400, "Asia/Khandyga" }, - { "yakt", 0, 32400, "Asia/Ust-Nera" }, - { "yakt", 0, 36000, "Asia/Chita" }, - { "yakt", 0, 36000, "Asia/Khandyga" }, { "yddt", 1, -25200, "America/Dawson" }, { "yddt", 1, -25200, "America/Whitehorse" }, { "yddt", 1, -25200, "Canada/Yukon" }, @@ -1762,13 +1570,6 @@ { "ydt", 1, -28800, "America/Whitehorse" }, { "ydt", 1, -28800, "America/Yakutat" }, { "ydt", 1, -28800, "Canada/Yukon" }, - { "yekst", 1, 21600, "Asia/Yekaterinburg" }, - { "yekt", 0, 18000, "Asia/Yekaterinburg" }, - { "yekt", 0, 21600, "Asia/Yekaterinburg" }, - { "yerst", 1, 18000, "Asia/Yerevan" }, - { "yerst", 1, 14400, "Asia/Yerevan" }, - { "yert", 0, 14400, "Asia/Yerevan" }, - { "yert", 0, 10800, "Asia/Yerevan" }, { "ypt", 1, -28800, "America/Dawson" }, { "ypt", 1, -28800, "America/Whitehorse" }, { "ypt", 1, -28800, "America/Yakutat" }, @@ -1809,22 +1610,4 @@ { "w", 0, -36000, NULL }, { "x", 0, -39600, NULL }, { "y", 0, -43200, NULL }, - { "zzz", 0, 0, "Antarctica/Davis" }, - { "zzz", 0, 0, "America/Cambridge_Bay" }, - { "zzz", 0, 0, "America/Inuvik" }, - { "zzz", 0, 0, "America/Iqaluit" }, - { "zzz", 0, 0, "America/Pangnirtung" }, - { "zzz", 0, 0, "America/Rankin_Inlet" }, - { "zzz", 0, 0, "America/Resolute" }, - { "zzz", 0, 0, "America/Yellowknife" }, - { "zzz", 0, 0, "Antarctica/Casey" }, - { "zzz", 0, 0, "Antarctica/DumontDUrville" }, - { "zzz", 0, 0, "Antarctica/Macquarie" }, - { "zzz", 0, 0, "Antarctica/Mawson" }, - { "zzz", 0, 0, "Antarctica/Palmer" }, - { "zzz", 0, 0, "Antarctica/Rothera" }, - { "zzz", 0, 0, "Antarctica/Syowa" }, - { "zzz", 0, 0, "Antarctica/Troll" }, - { "zzz", 0, 0, "Antarctica/Vostok" }, - { "zzz", 0, 0, "Indian/Kerguelen" }, { "z", 0, 0, NULL }, diff --git a/ext/date/lib/tm2unixtime.c b/ext/date/lib/tm2unixtime.c index 57e0cef1be..0d65006de4 100644 --- a/ext/date/lib/tm2unixtime.c +++ b/ext/date/lib/tm2unixtime.c @@ -32,6 +32,18 @@ static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 24 static int days_in_month_leap[13] = { 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static int days_in_month[13] = { 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; +static void do_range_limit_fraction(double *fraction, timelib_sll *seconds) +{ + if (*fraction < 0) { + *fraction += 1; + *seconds -= 1; + } + if (*fraction > 1) { + *fraction -= 1; + *seconds += 1; + } +} + static void do_range_limit(timelib_sll start, timelib_sll end, timelib_sll adj, timelib_sll *a, timelib_sll *b) { if (*a < start) { @@ -192,6 +204,7 @@ void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt) void timelib_do_normalize(timelib_time* time) { + if (time->s != TIMELIB_UNSET) do_range_limit_fraction(&time->f, &time->s); if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->s, &time->i); if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->i, &time->h); if (time->s != TIMELIB_UNSET) do_range_limit(0, 24, 24, &time->h, &time->d); @@ -209,6 +222,8 @@ static void do_adjust_relative(timelib_time* time) timelib_do_normalize(time); if (time->have_relative) { + time->f += time->relative.f; + time->s += time->relative.s; time->i += time->relative.i; time->h += time->relative.h; diff --git a/ext/date/lib/unixtime2tm.c b/ext/date/lib/unixtime2tm.c index a9b71662ea..6a8627a986 100644 --- a/ext/date/lib/unixtime2tm.c +++ b/ext/date/lib/unixtime2tm.c @@ -294,3 +294,10 @@ int timelib_apply_localtime(timelib_time *t, unsigned int localtime) } return 0; } + +#if HAVE_GETTIMEOFDAY +void timelib_set_fraction_from_timeval(timelib_time *t, struct timeval tp) +{ + t->f = (double) tp.tv_usec / 1000000; +} +#endif diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e960161987..7371590469 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -253,12 +253,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_date_time_set, 0, 0, 3) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) + ZEND_ARG_INFO(0, microseconds) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_time_set, 0, 0, 2) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) + ZEND_ARG_INFO(0, microseconds) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_date_set, 0, 0, 4) @@ -2370,6 +2372,8 @@ static HashTable *date_object_get_properties_interval(zval *object) /* {{{ */ PHP_DATE_INTERVAL_ADD_PROPERTY("h", h); PHP_DATE_INTERVAL_ADD_PROPERTY("i", i); PHP_DATE_INTERVAL_ADD_PROPERTY("s", s); + ZVAL_DOUBLE(&zv, (double)intervalobj->diff->f); + zend_hash_str_update(props, "f", sizeof("f") - 1, &zv); PHP_DATE_INTERVAL_ADD_PROPERTY("weekday", weekday); PHP_DATE_INTERVAL_ADD_PROPERTY("weekday_behavior", weekday_behavior); PHP_DATE_INTERVAL_ADD_PROPERTY("first_last_day_of", first_last_day_of); @@ -2487,6 +2491,23 @@ static void update_errors_warnings(timelib_error_container *last_errors) /* {{{ DATEG(last_errors) = last_errors; } /* }}} */ +static void php_date_set_time_fraction(timelib_time *time, int microseconds) +{ + time->f = microseconds / 1000000; +} + +static void php_date_set_current_time_fraction(timelib_time *time) +{ +#if HAVE_GETTIMEOFDAY + struct timeval tp = {0}; /* For setting microseconds */ + + gettimeofday(&tp, NULL); + timelib_set_fraction_from_timeval(time, tp); +#else + time->f = 0; +#endif +} + PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, int ctor) /* {{{ */ { timelib_time *now; @@ -2560,7 +2581,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, break; } timelib_unixtime2local(now, (timelib_sll) time(NULL)); - + php_date_set_current_time_fraction(now); timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE); timelib_update_ts(dateobj->time, tzi); timelib_update_from_sse(dateobj->time); @@ -3056,6 +3077,11 @@ static int php_date_modify(zval *object, char *modify, size_t modify_len) /* {{{ dateobj->time->s = 0; } } + + if (tmp_time->f != -99999) { + dateobj->time->f = tmp_time->f; + } + timelib_time_dtor(tmp_time); timelib_update_ts(dateobj->time, NULL); @@ -3355,7 +3381,7 @@ PHP_FUNCTION(date_offset_get) } /* }}} */ -static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long s, zval *return_value) /* {{{ */ +static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long s, zend_long ms, zval *return_value) /* {{{ */ { php_date_obj *dateobj; @@ -3364,22 +3390,23 @@ static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long dateobj->time->h = h; dateobj->time->i = i; dateobj->time->s = s; + dateobj->time->f = ((double) ms) / 1000000; timelib_update_ts(dateobj->time, NULL); } /* }}} */ -/* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second]) +/* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second[, long microseconds]]) Sets the time. */ PHP_FUNCTION(date_time_set) { zval *object; - zend_long h, i, s = 0; + zend_long h, i, s = 0, ms = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|ll", &object, date_ce_date, &h, &i, &s, &ms) == FAILURE) { RETURN_FALSE; } - php_date_time_set(object, h, i, s, return_value); + php_date_time_set(object, h, i, s, ms, return_value); Z_ADDREF_P(object); ZVAL_COPY_VALUE(return_value, object); @@ -3391,14 +3418,14 @@ PHP_FUNCTION(date_time_set) PHP_METHOD(DateTimeImmutable, setTime) { zval *object, new_object; - zend_long h, i, s = 0; + zend_long h, i, s = 0, ms = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|ll", &object, date_ce_immutable, &h, &i, &s, &ms) == FAILURE) { RETURN_FALSE; } date_clone_immutable(object, &new_object); - php_date_time_set(&new_object, h, i, s, return_value); + php_date_time_set(&new_object, h, i, s, ms, return_value); ZVAL_OBJ(return_value, Z_OBJ(new_object)); } @@ -3514,6 +3541,7 @@ static void php_date_timestamp_set(zval *object, zend_long timestamp, zval *retu DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp); timelib_update_ts(dateobj->time, NULL); + php_date_set_time_fraction(dateobj->time, 0); } /* }}} */ /* {{{ proto DateTime date_timestamp_set(DateTime object, long unixTimestamp) @@ -3979,6 +4007,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c zval *retval; zval tmp_member; timelib_sll value = -1; + double fvalue = -1; if (Z_TYPE_P(member) != IS_STRING) { tmp_member = *member; @@ -4010,6 +4039,10 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c GET_VALUE_FROM_STRUCT(h, "h"); GET_VALUE_FROM_STRUCT(i, "i"); GET_VALUE_FROM_STRUCT(s, "s"); + if (strcmp(Z_STRVAL_P(member), "f") == 0) { + fvalue = obj->diff->f; + break; + } GET_VALUE_FROM_STRUCT(invert, "invert"); GET_VALUE_FROM_STRUCT(days, "days"); /* didn't find any */ @@ -4024,7 +4057,9 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c retval = rv; - if (value != -99999) { + if (fvalue != -1) { + ZVAL_DOUBLE(retval, fvalue); + } else if (value != -99999) { ZVAL_LONG(retval, value); } else { ZVAL_FALSE(retval); @@ -4075,6 +4110,10 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void SET_VALUE_FROM_STRUCT(h, "h"); SET_VALUE_FROM_STRUCT(i, "i"); SET_VALUE_FROM_STRUCT(s, "s"); + if (strcmp(Z_STRVAL_P(member), "f") == 0) { + obj->diff->f = zval_get_double(value); + break; + } SET_VALUE_FROM_STRUCT(invert, "invert"); /* didn't find any */ (zend_get_std_object_handlers())->write_property(object, member, value, cache_slot); @@ -4139,12 +4178,23 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter } \ } while (0); +#define PHP_DATE_INTERVAL_READ_PROPERTY_DOUBLE(element, member, def) \ + do { \ + zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ + if (z_arg) { \ + (*intobj)->diff->member = (double)zval_get_double(z_arg); \ + } else { \ + (*intobj)->diff->member = (double)def; \ + } \ + } while (0); + PHP_DATE_INTERVAL_READ_PROPERTY("y", y, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("m", m, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("d", d, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("h", h, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("i", i, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY_DOUBLE("f", f, -1) PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int, -1) @@ -4254,6 +4304,9 @@ static zend_string *date_interval_format(char *format, size_t format_len, timeli case 'S': length = slprintf(buffer, 32, "%02" ZEND_LONG_FMT_SPEC, (zend_long) t->s); break; case 's': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) t->s); break; + case 'F': length = slprintf(buffer, 32, "%06" ZEND_LONG_FMT_SPEC, (zend_long) (t->f * 1000000)); break; + case 'f': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) (t->f * 1000000)); break; + case 'a': { if ((int) t->days != -99999) { length = slprintf(buffer, 32, "%d", (int) t->days); diff --git a/ext/date/tests/010.phpt b/ext/date/tests/010.phpt index 8b39229703..ff42de5dea 100644 --- a/ext/date/tests/010.phpt +++ b/ext/date/tests/010.phpt @@ -8,17 +8,8 @@ date_default_timezone_set('UTC'); echo "Done\n"; ?> --EXPECTF-- -array(6) { +array(5) { [0]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(0) - ["timezone_id"]=> - string(16) "Antarctica/Troll" - } - [1]=> array(3) { ["dst"]=> bool(false) @@ -27,7 +18,7 @@ array(6) { ["timezone_id"]=> string(13) "Etc/Universal" } - [2]=> + [1]=> array(3) { ["dst"]=> bool(false) @@ -36,7 +27,7 @@ array(6) { ["timezone_id"]=> string(7) "Etc/UTC" } - [3]=> + [2]=> array(3) { ["dst"]=> bool(false) @@ -45,7 +36,7 @@ array(6) { ["timezone_id"]=> string(8) "Etc/Zulu" } - [4]=> + [3]=> array(3) { ["dst"]=> bool(false) @@ -54,7 +45,7 @@ array(6) { ["timezone_id"]=> string(3) "UTC" } - [5]=> + [4]=> array(3) { ["dst"]=> bool(false) diff --git a/ext/date/tests/DateTimeZone_getLocation.phpt b/ext/date/tests/DateTimeZone_getLocation.phpt index 8e6e33bd17..2dec10ad57 100644 --- a/ext/date/tests/DateTimeZone_getLocation.phpt +++ b/ext/date/tests/DateTimeZone_getLocation.phpt @@ -1,6 +1,5 @@ --TEST-- -DateTimeZone::getLocation -- timezone_location_get — Returns location information for a timezone -public array DateTimeZone::getLocation ( void ) ; +DateTimeZone::getLocation -- timezone_location_get — Returns location information for a timezone public array DateTimeZone::getLocation ( void ) ; --CREDITS-- marcosptf - - #phparty7 - @phpsp - novatec/2015 - sao paulo - br --SKIPIF-- @@ -66,17 +65,3 @@ Array [longitude] => %f [comments] => %s ) -Array -( - [country_code] => %s - [latitude] => %f - [longitude] => %f - [comments] => %s -) -Array -( - [country_code] => %s - [latitude] => %f - [longitude] => %f - [comments] => -) diff --git a/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt index e4a5dbd175..1cbaaef377 100644 --- a/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt +++ b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt @@ -29,7 +29,7 @@ string(5) "array" int(%d) -- Format a sample entry -- -array(11) { +array(17) { [0]=> array(3) { ["dst"]=> @@ -44,11 +44,20 @@ array(11) { ["dst"]=> bool(false) ["offset"]=> - int(34200) + int(32400) ["timezone_id"]=> string(18) "Australia/Adelaide" } [2]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(34200) + ["timezone_id"]=> + string(18) "Australia/Adelaide" + } + [3]=> array(3) { ["dst"]=> bool(true) @@ -57,7 +66,7 @@ array(11) { ["timezone_id"]=> string(16) "America/Eirunepe" } - [3]=> + [4]=> array(3) { ["dst"]=> bool(true) @@ -66,7 +75,7 @@ array(11) { ["timezone_id"]=> string(18) "America/Rio_Branco" } - [4]=> + [5]=> array(3) { ["dst"]=> bool(true) @@ -75,7 +84,52 @@ array(11) { ["timezone_id"]=> string(11) "Brazil/Acre" } - [5]=> + [6]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(21) "Australia/Broken_Hill" + } + [7]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(16) "Australia/Darwin" + } + [8]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(15) "Australia/North" + } + [9]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(15) "Australia/South" + } + [10]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(20) "Australia/Yancowinna" + } + [11]=> array(3) { ["dst"]=> bool(false) @@ -84,7 +138,7 @@ array(11) { ["timezone_id"]=> string(13) "Asia/Jayapura" } - [6]=> + [12]=> array(3) { ["dst"]=> bool(false) @@ -93,7 +147,7 @@ array(11) { ["timezone_id"]=> string(21) "Australia/Broken_Hill" } - [7]=> + [13]=> array(3) { ["dst"]=> bool(false) @@ -102,7 +156,7 @@ array(11) { ["timezone_id"]=> string(16) "Australia/Darwin" } - [8]=> + [14]=> array(3) { ["dst"]=> bool(false) @@ -111,7 +165,7 @@ array(11) { ["timezone_id"]=> string(15) "Australia/North" } - [9]=> + [15]=> array(3) { ["dst"]=> bool(false) @@ -120,7 +174,7 @@ array(11) { ["timezone_id"]=> string(15) "Australia/South" } - [10]=> + [16]=> array(3) { ["dst"]=> bool(false) diff --git a/ext/date/tests/DateTime_setTime_error.phpt b/ext/date/tests/DateTime_setTime_error.phpt index eaf1555d1d..a6b5c5edea 100644 --- a/ext/date/tests/DateTime_setTime_error.phpt +++ b/ext/date/tests/DateTime_setTime_error.phpt @@ -25,7 +25,8 @@ echo "\n-- Testing DateTime::setTime() function with more than expected no. of a $min = 15; $sec = 30; $extra_arg = 10; -var_dump( $datetime->setTime($hour, $min, $sec, $extra_arg) ); +$microseconds = 123123; +var_dump( $datetime->setTime($hour, $min, $sec, $microseconds, $extra_arg) ); ?> ===DONE=== @@ -44,6 +45,6 @@ bool(false) -- Testing DateTime::setTime() function with more than expected no. of arguments -- -Warning: DateTime::setTime() expects at most 3 parameters, 4 given in %s on line %d +Warning: DateTime::setTime() expects at most 4 parameters, 5 given in %s on line %d bool(false) ===DONE=== diff --git a/ext/date/tests/bug45682.phpt b/ext/date/tests/bug45682.phpt index ea8fa94706..324f64867d 100644 --- a/ext/date/tests/bug45682.phpt +++ b/ext/date/tests/bug45682.phpt @@ -12,7 +12,7 @@ $diff = date_diff($date, $other); var_dump($diff); --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -25,6 +25,8 @@ object(DateInterval)#%d (15) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug48678.phpt b/ext/date/tests/bug48678.phpt index 253cb84ce6..9565cb2dfb 100644 --- a/ext/date/tests/bug48678.phpt +++ b/ext/date/tests/bug48678.phpt @@ -15,6 +15,7 @@ DateInterval Object [h] => 12 [i] => 30 [s] => 5 + [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 @@ -33,6 +34,7 @@ DateInterval Object [h] => 12 [i] => 30 [s] => 5 + [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 diff --git a/ext/date/tests/bug49081.phpt b/ext/date/tests/bug49081.phpt index 31f7351481..b5d17a6c26 100644 --- a/ext/date/tests/bug49081.phpt +++ b/ext/date/tests/bug49081.phpt @@ -17,6 +17,7 @@ DateInterval Object [h] => 4 [i] => 0 [s] => 0 + [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 diff --git a/ext/date/tests/bug49778.phpt b/ext/date/tests/bug49778.phpt index 2062d69168..56ce135179 100644 --- a/ext/date/tests/bug49778.phpt +++ b/ext/date/tests/bug49778.phpt @@ -7,8 +7,8 @@ var_dump($i); echo $i->format("%d"), "\n"; echo $i->format("%a"), "\n"; ?> ---EXPECT-- -object(DateInterval)#1 (15) { +--EXPECTF-- +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -21,6 +21,8 @@ object(DateInterval)#1 (15) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug52113.phpt b/ext/date/tests/bug52113.phpt index 62c2fca94e..dfc7d6112d 100644 --- a/ext/date/tests/bug52113.phpt +++ b/ext/date/tests/bug52113.phpt @@ -23,6 +23,7 @@ $unser = DateInterval::__set_state(array( 'h' => 4, 'i' => 3, 's' => 2, + 'f' => 0.876543, 'invert' => 1, 'days' => 2400, )); @@ -32,7 +33,7 @@ var_dump($unser, $p); ?> --EXPECT-- -object(DateInterval)#3 (15) { +object(DateInterval)#3 (16) { ["y"]=> int(0) ["m"]=> @@ -45,6 +46,8 @@ object(DateInterval)#3 (15) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -64,7 +67,7 @@ object(DateInterval)#3 (15) { ["have_special_relative"]=> int(0) } -string(320) "O:12:"DateInterval":15:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}" +string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}" DateInterval::__set_state(array( 'y' => 0, 'm' => 0, @@ -72,6 +75,7 @@ DateInterval::__set_state(array( 'h' => 4, 'i' => 0, 's' => 0, + 'f' => 0.0, 'weekday' => 0, 'weekday_behavior' => 0, 'first_last_day_of' => 0, @@ -81,7 +85,7 @@ DateInterval::__set_state(array( 'special_amount' => 0, 'have_weekday_relative' => 0, 'have_special_relative' => 0, -))object(DateInterval)#5 (15) { +))object(DateInterval)#5 (16) { ["y"]=> int(0) ["m"]=> @@ -94,6 +98,8 @@ DateInterval::__set_state(array( int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -128,7 +134,7 @@ object(DatePeriod)#6 (6) { ["end"]=> NULL ["interval"]=> - object(DateInterval)#7 (15) { + object(DateInterval)#7 (16) { ["y"]=> int(0) ["m"]=> @@ -141,6 +147,8 @@ object(DatePeriod)#6 (6) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -165,7 +173,7 @@ object(DatePeriod)#6 (6) { ["include_start_date"]=> bool(true) } -object(DateInterval)#8 (15) { +object(DateInterval)#8 (16) { ["y"]=> int(7) ["m"]=> @@ -178,6 +186,8 @@ object(DateInterval)#8 (15) { int(3) ["s"]=> int(2) + ["f"]=> + float(0.876543) ["weekday"]=> int(-1) ["weekday_behavior"]=> @@ -212,7 +222,7 @@ object(DatePeriod)#9 (6) { ["end"]=> NULL ["interval"]=> - object(DateInterval)#7 (15) { + object(DateInterval)#7 (16) { ["y"]=> int(0) ["m"]=> @@ -225,6 +235,8 @@ object(DatePeriod)#9 (6) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug52738.phpt b/ext/date/tests/bug52738.phpt index ea219f7c7c..6ed72af1c1 100644 --- a/ext/date/tests/bug52738.phpt +++ b/ext/date/tests/bug52738.phpt @@ -27,6 +27,7 @@ di Object [h] => 0 [i] => 0 [s] => 0 + [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 diff --git a/ext/date/tests/bug52808.phpt b/ext/date/tests/bug52808.phpt index 1f0fc84cd7..810874858f 100644 --- a/ext/date/tests/bug52808.phpt +++ b/ext/date/tests/bug52808.phpt @@ -25,7 +25,7 @@ foreach($intervals as $iv) { echo "==DONE==\n"; ?> --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(1) ["m"]=> @@ -38,6 +38,8 @@ object(DateInterval)#%d (15) { int(30) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -57,7 +59,7 @@ object(DateInterval)#%d (15) { ["have_special_relative"]=> int(0) } -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -70,6 +72,8 @@ object(DateInterval)#%d (15) { int(30) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -89,7 +93,7 @@ object(DateInterval)#%d (15) { ["have_special_relative"]=> int(0) } -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -102,6 +106,8 @@ object(DateInterval)#%d (15) { int(30) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug53437.phpt b/ext/date/tests/bug53437.phpt index f82a4879b3..0be9691a14 100644 --- a/ext/date/tests/bug53437.phpt +++ b/ext/date/tests/bug53437.phpt @@ -51,7 +51,7 @@ object(DatePeriod)#1 (6) { ["end"]=> NULL ["interval"]=> - object(DateInterval)#5 (15) { + object(DateInterval)#5 (16) { ["y"]=> int(0) ["m"]=> @@ -64,6 +64,8 @@ object(DatePeriod)#1 (6) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -110,7 +112,7 @@ object(DatePeriod)#5 (6) { ["end"]=> NULL ["interval"]=> - object(DateInterval)#8 (15) { + object(DateInterval)#8 (16) { ["y"]=> int(0) ["m"]=> @@ -123,6 +125,8 @@ object(DatePeriod)#5 (6) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug53437_var2.phpt b/ext/date/tests/bug53437_var2.phpt index 50aebda57c..2ef21e738e 100644 --- a/ext/date/tests/bug53437_var2.phpt +++ b/ext/date/tests/bug53437_var2.phpt @@ -13,7 +13,7 @@ var_dump($di0, $di1); ?> ==DONE== --EXPECT-- -object(DateInterval)#1 (15) { +object(DateInterval)#1 (16) { ["y"]=> int(2) ["m"]=> @@ -26,6 +26,8 @@ object(DateInterval)#1 (15) { int(8) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -45,7 +47,7 @@ object(DateInterval)#1 (15) { ["have_special_relative"]=> int(0) } -object(DateInterval)#2 (15) { +object(DateInterval)#2 (16) { ["y"]=> int(2) ["m"]=> @@ -58,6 +60,8 @@ object(DateInterval)#2 (15) { int(8) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/bug53437_var4.phpt b/ext/date/tests/bug53437_var4.phpt index 88fd81c9db..189c15cb1b 100644 --- a/ext/date/tests/bug53437_var4.phpt +++ b/ext/date/tests/bug53437_var4.phpt @@ -15,13 +15,14 @@ var_dump($df, $df->h, $df->i, $df->s, + $df->f, $df->invert, $df->days); ?> ==DONE== --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -34,6 +35,8 @@ object(DateInterval)#%d (15) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -59,6 +62,7 @@ int(2) int(0) int(0) int(0) +float(0) int(0) int(2) ==DONE== diff --git a/ext/date/tests/bug53437_var5.phpt b/ext/date/tests/bug53437_var5.phpt index e95fcdae96..38783b1545 100644 --- a/ext/date/tests/bug53437_var5.phpt +++ b/ext/date/tests/bug53437_var5.phpt @@ -12,7 +12,7 @@ var_dump($di); ?> ==DONE== --EXPECTF-- -object(DateInterval)#%d (15) { +object(DateInterval)#%d (16) { ["y"]=> int(2) ["m"]=> @@ -43,5 +43,7 @@ object(DateInterval)#%d (15) { int(9) ["have_special_relative"]=> int(0) + ["f"]=> + float(-1) } ==DONE== diff --git a/ext/date/tests/bug53437_var6.phpt b/ext/date/tests/bug53437_var6.phpt new file mode 100644 index 0000000000..633fcb3f38 --- /dev/null +++ b/ext/date/tests/bug53437_var6.phpt @@ -0,0 +1,49 @@ +--TEST-- +Bug #53437 DateInterval unserialize bad data, 64 bit +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +object(DateInterval)#%d (16) { + ["y"]=> + int(2) + ["m"]=> + int(0) + ["d"]=> + int(0) + ["h"]=> + int(6) + ["i"]=> + int(8) + ["s"]=> + int(0) + ["f"]=> + float(0.123654) + ["weekday"]=> + int(10) + ["weekday_behavior"]=> + int(10) + ["first_last_day_of"]=> + int(0) + ["invert"]=> + int(0) + ["days"]=> + int(0) + ["special_type"]=> + int(0) + ["special_amount"]=> + int(9223372036854775807) + ["have_weekday_relative"]=> + int(9) + ["have_special_relative"]=> + int(0) +} +==DONE== diff --git a/ext/date/tests/bug60774.phpt b/ext/date/tests/bug60774.phpt index 7045cd7781..0a9c4223c3 100644 --- a/ext/date/tests/bug60774.phpt +++ b/ext/date/tests/bug60774.phpt @@ -21,6 +21,8 @@ object(DateInterval)#1 (%d) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/date_diff1.phpt b/ext/date/tests/date_diff1.phpt index fefffcde52..2b73eae6a8 100644 --- a/ext/date/tests/date_diff1.phpt +++ b/ext/date/tests/date_diff1.phpt @@ -11,7 +11,7 @@ var_dump($start); var_dump($end); var_dump($int); ?> ---EXPECT-- +--EXPECTF-- object(DateTime)#1 (3) { ["date"]=> string(26) "2010-10-04 02:18:48.000000" @@ -28,7 +28,7 @@ object(DateTime)#2 (3) { ["timezone"]=> string(3) "EDT" } -object(DateInterval)#3 (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -41,6 +41,8 @@ object(DateInterval)#3 (15) { int(19) ["s"]=> int(40) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> diff --git a/ext/date/tests/date_interval_create_from_date_string_nullparam.phpt b/ext/date/tests/date_interval_create_from_date_string_nullparam.phpt index 369db5714a..526b474e47 100644 --- a/ext/date/tests/date_interval_create_from_date_string_nullparam.phpt +++ b/ext/date/tests/date_interval_create_from_date_string_nullparam.phpt @@ -8,7 +8,7 @@ $i = date_interval_create_from_date_string(null); //returns a empty object var_dump($i); ?> --EXPECTF-- -object(DateInterval)#1 (15) { +object(DateInterval)#%d (16) { ["y"]=> int(0) ["m"]=> @@ -21,6 +21,8 @@ object(DateInterval)#1 (15) { int(0) ["s"]=> int(0) + ["f"]=> + float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> @@ -39,4 +41,4 @@ object(DateInterval)#1 (15) { int(0) ["have_special_relative"]=> int(0) -} \ No newline at end of file +} diff --git a/ext/date/tests/date_interval_create_from_date_string_wrongparam_002.phpt b/ext/date/tests/date_interval_create_from_date_string_wrongparam_002.phpt index a3407c3967..89cea6abf3 100644 --- a/ext/date/tests/date_interval_create_from_date_string_wrongparam_002.phpt +++ b/ext/date/tests/date_interval_create_from_date_string_wrongparam_002.phpt @@ -1,9 +1,8 @@ --TEST-- Test date_interval_create_from_date_string() function : with 2 parameters (wrong). -Rodrigo Prado de Jesus --FILE-- --EXPECTF-- -Warning: date_interval_create_from_date_string() expects exactly 1 parameter, 2 given in %s on line %d \ No newline at end of file +Warning: date_interval_create_from_date_string() expects exactly 1 parameter, 2 given in %s on line %d diff --git a/ext/date/tests/date_time_fractions.phpt b/ext/date/tests/date_time_fractions.phpt new file mode 100644 index 0000000000..c58ed4f431 --- /dev/null +++ b/ext/date/tests/date_time_fractions.phpt @@ -0,0 +1,99 @@ +--TEST-- +Fractions with DateTime objects +--INI-- +date.timezone=UTC +--FILE-- +format('u'); +echo ($ms = 0) ? "microseconds = false\n" : "microseconds = true\n"; + +/* Normal creation */ +echo date_create( "2016-10-03 12:47:18.819313" )->format( "Y-m-d H:i:s.u" ), "\n\n"; + +/* With modifications */ +$dt = new DateTimeImmutable( "2016-10-03 12:47:18.819210" ); +echo $dt->modify( "+1 day" )->format( "Y-m-d H:i:s.u" ), "\n"; + +$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" ); +echo $dt->modify( "-3 months" )->format( "Y-m-d H:i:s.u" ), "\n"; + +echo "\n"; + +/* These should reset the time (and hence fraction) to 0 */ +$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" ); +echo $dt->modify( "yesterday" )->format( "Y-m-d H:i:s.u" ), "\n"; + +$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" ); +echo $dt->modify( "noon" )->format( "Y-m-d H:i:s.u" ), "\n"; + +$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" ); +echo $dt->modify( "10 weekday" )->format( "Y-m-d H:i:s.u" ), "\n"; + +/* Interval containing fractions */ + +$dt1 = new DateTimeImmutable( "2016-10-03 13:20:07.103123" ); +$dt2 = new DateTimeImmutable( "2016-10-03 13:20:07.481312" ); +$diff = $dt1->diff( $dt2 ); + +var_dump( $diff ); + +$dt0 = $dt1->sub( $diff ); +$dt3 = $dt2->add( $diff ); +$dt4 = $dt3->add( $diff ); + +echo $dt0->format( "Y-m-d H:i:s.u" ), "\n"; +echo $dt1->format( "Y-m-d H:i:s.u" ), "\n"; +echo $dt2->format( "Y-m-d H:i:s.u" ), "\n"; +echo $dt3->format( "Y-m-d H:i:s.u" ), "\n"; +echo $dt4->format( "Y-m-d H:i:s.u" ), "\n"; +?> +--EXPECTF-- +microseconds = true +2016-10-03 12:47:18.819313 + +2016-10-04 12:47:18.819210 +2016-07-03 12:47:18.081921 + +2016-10-02 00:00:00.000000 +2016-10-03 12:00:00.000000 +2016-10-17 00:00:00.000000 +object(DateInterval)#%d (16) { + ["y"]=> + int(0) + ["m"]=> + int(0) + ["d"]=> + int(0) + ["h"]=> + int(0) + ["i"]=> + int(0) + ["s"]=> + int(0) + ["f"]=> + float(0.378189) + ["weekday"]=> + int(0) + ["weekday_behavior"]=> + int(0) + ["first_last_day_of"]=> + int(0) + ["invert"]=> + int(0) + ["days"]=> + int(0) + ["special_type"]=> + int(0) + ["special_amount"]=> + int(0) + ["have_weekday_relative"]=> + int(0) + ["have_special_relative"]=> + int(0) +} +2016-10-03 13:20:06.724934 +2016-10-03 13:20:07.103123 +2016-10-03 13:20:07.481312 +2016-10-03 13:20:07.859501 +2016-10-03 13:20:08.237690 diff --git a/ext/date/tests/date_time_fractions_create_from_format.phpt b/ext/date/tests/date_time_fractions_create_from_format.phpt new file mode 100644 index 0000000000..c598f174ad --- /dev/null +++ b/ext/date/tests/date_time_fractions_create_from_format.phpt @@ -0,0 +1,29 @@ +--TEST-- +Fractions with DateTime objects (create_from_format) +--INI-- +date.timezone=UTC +--FILE-- + +--EXPECTF-- +object(DateTime)#%d (%d) { + ["date"]=> + string(26) "2016-10-03 12:47:18.819313" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +object(DateTime)#%d (%d) { + ["date"]=> + string(26) "2016-10-03 13:19:59.176312" + ["timezone_type"]=> + int(1) + ["timezone"]=> + string(6) "+00:00" +} diff --git a/ext/date/tests/date_time_fractions_serialize.phpt b/ext/date/tests/date_time_fractions_serialize.phpt new file mode 100644 index 0000000000..4931bb02b3 --- /dev/null +++ b/ext/date/tests/date_time_fractions_serialize.phpt @@ -0,0 +1,25 @@ +--TEST-- +Fractions with DateTime objects (Serialization) +--INI-- +date.timezone=UTC +--FILE-- + +--EXPECTF-- +O:8:"DateTime":3:{s:4:"date";s:26:"2016-10-03 12:47:18.819313";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";} +object(DateTime)#2 (%d) { + ["date"]=> + string(26) "2016-10-03 12:47:18.819313" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} diff --git a/ext/date/tests/date_time_set_error.phpt b/ext/date/tests/date_time_set_error.phpt index 8e5c855bcd..5c5ddaf4d2 100644 --- a/ext/date/tests/date_time_set_error.phpt +++ b/ext/date/tests/date_time_set_error.phpt @@ -24,8 +24,9 @@ var_dump( date_time_set($datetime, $hour) ); echo "\n-- Testing date_time_set() function with more than expected no. of arguments --\n"; $min = 15; $sec = 30; +$microseconds = 123123; $extra_arg = 10; -var_dump( date_time_set($datetime, $hour, $min, $sec, $extra_arg) ); +var_dump( date_time_set($datetime, $hour, $min, $sec, $microseconds, $extra_arg) ); echo "\n-- Testing date_time_set() function with an invalid values for \$object argument --\n"; $invalid_obj = new stdClass(); @@ -54,7 +55,7 @@ bool(false) -- Testing date_time_set() function with more than expected no. of arguments -- -Warning: date_time_set() expects at most 4 parameters, 5 given in %s on line %d +Warning: date_time_set() expects at most 5 parameters, 6 given in %s on line %d bool(false) -- Testing date_time_set() function with an invalid values for $object argument -- diff --git a/ext/date/tests/timezone_abbreviations_list_basic1.phpt b/ext/date/tests/timezone_abbreviations_list_basic1.phpt index 73af2acf3d..7a0dcdee98 100644 --- a/ext/date/tests/timezone_abbreviations_list_basic1.phpt +++ b/ext/date/tests/timezone_abbreviations_list_basic1.phpt @@ -29,7 +29,7 @@ string(5) "array" int(%d) -- Format a sample entry -- -array(11) { +array(17) { [0]=> array(3) { ["dst"]=> @@ -44,11 +44,20 @@ array(11) { ["dst"]=> bool(false) ["offset"]=> - int(34200) + int(32400) ["timezone_id"]=> string(18) "Australia/Adelaide" } [2]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(34200) + ["timezone_id"]=> + string(18) "Australia/Adelaide" + } + [3]=> array(3) { ["dst"]=> bool(true) @@ -57,7 +66,7 @@ array(11) { ["timezone_id"]=> string(16) "America/Eirunepe" } - [3]=> + [4]=> array(3) { ["dst"]=> bool(true) @@ -66,7 +75,7 @@ array(11) { ["timezone_id"]=> string(18) "America/Rio_Branco" } - [4]=> + [5]=> array(3) { ["dst"]=> bool(true) @@ -75,7 +84,52 @@ array(11) { ["timezone_id"]=> string(11) "Brazil/Acre" } - [5]=> + [6]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(21) "Australia/Broken_Hill" + } + [7]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(16) "Australia/Darwin" + } + [8]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(15) "Australia/North" + } + [9]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(15) "Australia/South" + } + [10]=> + array(3) { + ["dst"]=> + bool(false) + ["offset"]=> + int(32400) + ["timezone_id"]=> + string(20) "Australia/Yancowinna" + } + [11]=> array(3) { ["dst"]=> bool(false) @@ -84,7 +138,7 @@ array(11) { ["timezone_id"]=> string(13) "Asia/Jayapura" } - [6]=> + [12]=> array(3) { ["dst"]=> bool(false) @@ -93,7 +147,7 @@ array(11) { ["timezone_id"]=> string(21) "Australia/Broken_Hill" } - [7]=> + [13]=> array(3) { ["dst"]=> bool(false) @@ -102,7 +156,7 @@ array(11) { ["timezone_id"]=> string(16) "Australia/Darwin" } - [8]=> + [14]=> array(3) { ["dst"]=> bool(false) @@ -111,7 +165,7 @@ array(11) { ["timezone_id"]=> string(15) "Australia/North" } - [9]=> + [15]=> array(3) { ["dst"]=> bool(false) @@ -120,7 +174,7 @@ array(11) { ["timezone_id"]=> string(15) "Australia/South" } - [10]=> + [16]=> array(3) { ["dst"]=> bool(false) diff --git a/ext/date/tests/timezone_name_from_abbr_basic1.phpt b/ext/date/tests/timezone_name_from_abbr_basic1.phpt index b591fe28f9..492c623eb1 100644 --- a/ext/date/tests/timezone_name_from_abbr_basic1.phpt +++ b/ext/date/tests/timezone_name_from_abbr_basic1.phpt @@ -24,11 +24,7 @@ var_dump( timezone_name_from_abbr("EDT") ); echo "-- Lookup with name and offset--\n"; var_dump( timezone_name_from_abbr("ADT", -10800) ); var_dump( timezone_name_from_abbr("ADT", 14400) ); -var_dump( timezone_name_from_abbr("AKTT", 14400) ); -var_dump( timezone_name_from_abbr("aktt", 18000) ); -var_dump( timezone_name_from_abbr("Aktt", 21600) ); var_dump( timezone_name_from_abbr("AMST", -10800) ); -var_dump( timezone_name_from_abbr("amst", 180000) ); echo "-- Tests without valid name - uses gmtOffset and isdst to find match --\n"; var_dump( timezone_name_from_abbr("", 3600, 1) ); @@ -52,11 +48,7 @@ string(16) "America/New_York" -- Lookup with name and offset-- string(15) "America/Halifax" string(12) "Asia/Baghdad" -string(11) "Asia/Aqtobe" -string(11) "Asia/Aqtobe" -string(11) "Asia/Aqtobe" string(17) "America/Boa_Vista" -string(12) "Asia/Yerevan" -- Tests without valid name - uses gmtOffset and isdst to find match -- string(13) "Europe/London" string(17) "America/Sao_Paulo" @@ -65,4 +57,4 @@ string(15) "America/Halifax" -- Tests with invalid offsets -- bool(false) bool(false) -===DONE=== \ No newline at end of file +===DONE=== diff --git a/ext/spl/tests/bug70155.phpt b/ext/spl/tests/bug70155.phpt index 1730a1a587..340700471d 100644 --- a/ext/spl/tests/bug70155.phpt +++ b/ext/spl/tests/bug70155.phpt @@ -14,7 +14,7 @@ object(ArrayObject)#1 (2) { [0]=> int(0) ["storage":"ArrayObject":private]=> - object(DateInterval)#2 (15) { + object(DateInterval)#2 (16) { ["y"]=> int(3) ["m"]=> @@ -27,6 +27,8 @@ object(ArrayObject)#1 (2) { int(-1) ["s"]=> int(-1) + ["f"]=> + float(-1) ["weekday"]=> int(-1) ["weekday_behavior"]=> -- cgit v1.2.1