- Fixed bug #34676: missing support for strtotime("midnight") and
authorDerick Rethans <derick@php.net>
Sat, 8 Oct 2005 14:30:15 +0000 (14:30 +0000)
committerDerick Rethans <derick@php.net>
Sat, 8 Oct 2005 14:30:15 +0000 (14:30 +0000)
  strtotime("noon").

ext/date/lib/parse_date.c
ext/date/lib/parse_date.re
ext/date/lib/resource/parse_date.re
ext/date/tests/bug34676.phpt [new file with mode: 0644]

index 01742fb3ed2f2408e853ec014c54e340ec76275d..8c028a5e00202d32ec2040c63e34df6228318b1b 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.10.dev on Fri Oct  7 09:56:07 2005 */
+/* Generated by re2c 0.9.10.dev on Sat Oct  8 16:29:08 2005 */
 #line 1 "resource/parse_date.re"
 /*
    +----------------------------------------------------------------------+
@@ -748,17 +748,17 @@ yy0:
        case 0x00:      case 0x0A:      goto yy45;
        case ' ':       case ',':       case '.':       goto yy43;
        case '+':       case '-':       goto yy40;
-       case '0':       goto yy8;
-       case '1':       goto yy9;
-       case '2':       goto yy10;
-       case '3':       goto yy11;
+       case '0':       goto yy9;
+       case '1':       goto yy10;
+       case '2':       goto yy11;
+       case '3':       goto yy12;
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy12;
-       case '@':       goto yy6;
+       case '9':       goto yy13;
+       case '@':       goto yy7;
        case 'A':       goto yy22;
        case 'B':
        case 'C':       case 'G':
@@ -767,19 +767,19 @@ yy0:
        case 'Z':       goto yy41;
        case 'D':       goto yy29;
        case 'E':       goto yy32;
-       case 'F':       goto yy18;
-       case 'I':       goto yy13;
-       case 'J':       goto yy16;
+       case 'F':       goto yy19;
+       case 'I':       goto yy14;
+       case 'J':       goto yy17;
        case 'L':       goto yy34;
-       case 'M':       goto yy20;
+       case 'M':       goto yy21;
        case 'N':       goto yy28;
        case 'O':       goto yy26;
        case 'P':       goto yy36;
        case 'S':       goto yy24;
        case 'T':       goto yy31;
-       case 'V':       goto yy14;
+       case 'V':       goto yy15;
        case 'W':       goto yy38;
-       case 'X':       goto yy15;
+       case 'X':       goto yy16;
        case 'a':       goto yy23;
        case 'b':
        case 'c':       case 'g':
@@ -789,15 +789,15 @@ yy0:
        case 'v':       case 'x':       case 'z':       goto yy42;
        case 'd':       goto yy30;
        case 'e':       goto yy33;
-       case 'f':       goto yy19;
-       case 'j':       goto yy17;
+       case 'f':       goto yy20;
+       case 'j':       goto yy18;
        case 'l':       goto yy35;
-       case 'm':       goto yy21;
+       case 'm':       goto yy5;
        case 'n':       goto yy4;
        case 'o':       goto yy27;
        case 'p':       goto yy37;
        case 's':       goto yy25;
-       case 't':       goto yy5;
+       case 't':       goto yy6;
        case 'w':       goto yy39;
        case 'y':       goto yy2;
        default:        goto yy47;
@@ -810,14 +810,14 @@ yy2:
                if(yych <= 'Z') goto yy48;
                goto yy3;
        } else {
-               if(yych == 'e') goto yy1318;
+               if(yych == 'e') goto yy1327;
                if(yych <= 'z') goto yy48;
                goto yy3;
        }
 yy3:
        YYDEBUG(3, *YYCURSOR);
 
-#line 1284 "resource/parse_date.re"
+#line 1296 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("tzcorrection | tz");
@@ -851,7 +851,7 @@ yy4:
                                if(yych <= 'i') goto yy605;
                                goto yy48;
                        } else {
-                               if(yych <= 'o') goto yy1315;
+                               if(yych <= 'o') goto yy1321;
                                if(yych <= 'z') goto yy48;
                                goto yy3;
                        }
@@ -860,6 +860,30 @@ yy4:
 yy5:
        YYDEBUG(5, *YYCURSOR);
        yych = *++YYCURSOR;
+       if(yych <= '`'){
+               if(yych <= 'N'){
+                       if(yych <= '@') goto yy3;
+                       if(yych <= 'A') goto yy699;
+                       goto yy48;
+               } else {
+                       if(yych <= 'O') goto yy702;
+                       if(yych <= 'Z') goto yy48;
+                       goto yy3;
+               }
+       } else {
+               if(yych <= 'i'){
+                       if(yych <= 'a') goto yy699;
+                       if(yych <= 'h') goto yy48;
+                       goto yy1315;
+               } else {
+                       if(yych == 'o') goto yy702;
+                       if(yych <= 'z') goto yy48;
+                       goto yy3;
+               }
+       }
+yy6:
+       YYDEBUG(6, *YYCURSOR);
+       yych = *++YYCURSOR;
        YYDEBUG(-1, yych);
        switch(yych){
        case 'A':
@@ -902,26 +926,26 @@ yy5:
        case 'o':       goto yy1303;
        default:        goto yy3;
        }
-yy6:
-       YYDEBUG(6, *YYCURSOR);
+yy7:
+       YYDEBUG(7, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == '-') goto yy1299;
-       if(yych <= '0') goto yy7;
+       if(yych <= '0') goto yy8;
        if(yych <= '9') goto yy1300;
-       goto yy7;
-yy7:
-       YYDEBUG(7, *YYCURSOR);
+       goto yy8;
+yy8:
+       YYDEBUG(8, *YYCURSOR);
 
-#line 1350 "resource/parse_date.re"
+#line 1362 "resource/parse_date.re"
 {
 /*             printf("unexpected character: #%d, %c ", *s->tok, *s->tok); */
                s->errors++;
                goto std;
        }
-#line 907 "<stdout>"
-yy8:
-       YYDEBUG(8, *YYCURSOR);
+#line 929 "<stdout>"
+yy9:
+       YYDEBUG(9, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        YYDEBUG(-1, yych);
@@ -964,10 +988,10 @@ yy8:
        case '8':
        case '9':       goto yy1297;
        case ':':       goto yy1266;
-       default:        goto yy7;
+       default:        goto yy8;
        }
-yy9:
-       YYDEBUG(9, *YYCURSOR);
+yy10:
+       YYDEBUG(10, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        YYDEBUG(-1, yych);
@@ -1012,10 +1036,10 @@ yy9:
        case '8':
        case '9':       goto yy1264;
        case ':':       goto yy795;
-       default:        goto yy7;
+       default:        goto yy8;
        }
-yy10:
-       YYDEBUG(10, *YYCURSOR);
+yy11:
+       YYDEBUG(11, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        YYDEBUG(-1, yych);
@@ -1060,10 +1084,10 @@ yy10:
        case '8':
        case '9':       goto yy1254;
        case ':':       goto yy795;
-       default:        goto yy7;
+       default:        goto yy8;
        }
-yy11:
-       YYDEBUG(11, *YYCURSOR);
+yy12:
+       YYDEBUG(12, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        YYDEBUG(-1, yych);
@@ -1108,10 +1132,10 @@ yy11:
        case '8':
        case '9':       goto yy781;
        case ':':       goto yy795;
-       default:        goto yy7;
+       default:        goto yy8;
        }
-yy12:
-       YYDEBUG(12, *YYCURSOR);
+yy13:
+       YYDEBUG(13, *YYCURSOR);
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        YYDEBUG(-1, yych);
@@ -1156,10 +1180,10 @@ yy12:
        case '8':
        case '9':       goto yy781;
        case ':':       goto yy795;
-       default:        goto yy7;
+       default:        goto yy8;
        }
-yy13:
-       YYDEBUG(13, *YYCURSOR);
+yy14:
+       YYDEBUG(14, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= 'I'){
@@ -1185,8 +1209,8 @@ yy13:
                        goto yy3;
                }
        }
-yy14:
-       YYDEBUG(14, *YYCURSOR);
+yy15:
+       YYDEBUG(15, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '@'){
@@ -1208,8 +1232,8 @@ yy14:
                        goto yy3;
                }
        }
-yy15:
-       YYDEBUG(15, *YYCURSOR);
+yy16:
+       YYDEBUG(16, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '@'){
@@ -1231,8 +1255,8 @@ yy15:
                        goto yy3;
                }
        }
-yy16:
-       YYDEBUG(16, *YYCURSOR);
+yy17:
+       YYDEBUG(17, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= 'Z'){
                if(yych <= 'A'){
@@ -1253,8 +1277,8 @@ yy16:
                        goto yy3;
                }
        }
-yy17:
-       YYDEBUG(17, *YYCURSOR);
+yy18:
+       YYDEBUG(18, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= 'Z'){
                if(yych <= 'A'){
@@ -1275,8 +1299,8 @@ yy17:
                        goto yy3;
                }
        }
-yy18:
-       YYDEBUG(18, *YYCURSOR);
+yy19:
+       YYDEBUG(19, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= 'Z'){
                if(yych <= 'I'){
@@ -1318,8 +1342,8 @@ yy18:
                        }
                }
        }
-yy19:
-       YYDEBUG(19, *YYCURSOR);
+yy20:
+       YYDEBUG(20, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= 'Z'){
                if(yych <= 'I'){
@@ -1361,28 +1385,6 @@ yy19:
                        }
                }
        }
-yy20:
-       YYDEBUG(20, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if(yych <= 'Z'){
-               if(yych <= 'A'){
-                       if(yych <= '@') goto yy3;
-                       goto yy699;
-               } else {
-                       if(yych == 'O') goto yy700;
-                       goto yy48;
-               }
-       } else {
-               if(yych <= 'n'){
-                       if(yych <= '`') goto yy3;
-                       if(yych <= 'a') goto yy707;
-                       goto yy51;
-               } else {
-                       if(yych <= 'o') goto yy708;
-                       if(yych <= 'z') goto yy51;
-                       goto yy3;
-               }
-       }
 yy21:
        YYDEBUG(21, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -1391,17 +1393,17 @@ yy21:
                        if(yych <= '@') goto yy3;
                        goto yy699;
                } else {
-                       if(yych == 'O') goto yy700;
+                       if(yych == 'O') goto yy702;
                        goto yy48;
                }
        } else {
                if(yych <= 'n'){
                        if(yych <= '`') goto yy3;
-                       if(yych <= 'a') goto yy699;
-                       goto yy48;
+                       if(yych <= 'a') goto yy700;
+                       goto yy51;
                } else {
-                       if(yych <= 'o') goto yy700;
-                       if(yych <= 'z') goto yy48;
+                       if(yych <= 'o') goto yy701;
+                       if(yych <= 'z') goto yy51;
                        goto yy3;
                }
        }
@@ -1822,11 +1824,11 @@ yy39:
 yy40:
        YYDEBUG(40, *YYCURSOR);
        yych = *++YYCURSOR;
-       if(yych <= '/') goto yy7;
+       if(yych <= '/') goto yy8;
        if(yych <= '1') goto yy61;
        if(yych <= '2') goto yy62;
        if(yych <= '9') goto yy63;
-       goto yy7;
+       goto yy8;
 yy41:
        YYDEBUG(41, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -1850,11 +1852,11 @@ yy43:
 yy44:
        YYDEBUG(44, *YYCURSOR);
 
-#line 1339 "resource/parse_date.re"
+#line 1351 "resource/parse_date.re"
 {
                goto std;
        }
-#line 1763 "<stdout>"
+#line 1765 "<stdout>"
 yy45:
        YYDEBUG(45, *YYCURSOR);
        ++YYCURSOR;
@@ -1862,16 +1864,16 @@ yy45:
 yy46:
        YYDEBUG(46, *YYCURSOR);
 
-#line 1344 "resource/parse_date.re"
+#line 1356 "resource/parse_date.re"
 {
                s->pos = cursor; s->line++;
                goto std;
        }
-#line 1772 "<stdout>"
+#line 1774 "<stdout>"
 yy47:
        YYDEBUG(47, *YYCURSOR);
        yych = *++YYCURSOR;
-       goto yy7;
+       goto yy8;
 yy48:
        YYDEBUG(48, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -1961,7 +1963,7 @@ yy54:
        case 1: goto yy3;
        case 7: goto yy527;
        case 2: goto yy85;
-       case 0: goto yy7;
+       case 0: goto yy8;
        }
 yy55:
        YYDEBUG(55, *YYCURSOR);
@@ -2325,7 +2327,7 @@ yy84:
 yy85:
        YYDEBUG(85, *YYCURSOR);
 
-#line 1323 "resource/parse_date.re"
+#line 1335 "resource/parse_date.re"
 {
                timelib_ull i;
                DEBUG_OUTPUT("relative");
@@ -2340,7 +2342,7 @@ yy85:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 2162 "<stdout>"
+#line 2164 "<stdout>"
 yy86:
        YYDEBUG(86, *YYCURSOR);
        ++YYCURSOR;
@@ -3033,12 +3035,12 @@ yy150:
 yy151:
        YYDEBUG(151, *YYCURSOR);
 
-#line 1278 "resource/parse_date.re"
+#line 1290 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("dayabbr");
                goto std;
        }
-#line 2726 "<stdout>"
+#line 2728 "<stdout>"
 yy152:
        YYDEBUG(152, *YYCURSOR);
        yyaccept = 1;
@@ -3077,7 +3079,7 @@ yy157:
 yy158:
        YYDEBUG(158, *YYCURSOR);
 
-#line 1262 "resource/parse_date.re"
+#line 1274 "resource/parse_date.re"
 {
                const timelib_relunit* relunit;
                DEBUG_OUTPUT("dayfull");
@@ -3092,7 +3094,7 @@ yy158:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 2766 "<stdout>"
+#line 2768 "<stdout>"
 yy159:
        YYDEBUG(159, *YYCURSOR);
        yyaccept = 1;
@@ -3461,7 +3463,7 @@ yy189:
 yy190:
        YYDEBUG(190, *YYCURSOR);
 
-#line 1246 "resource/parse_date.re"
+#line 1258 "resource/parse_date.re"
 {
                timelib_sll i;
                DEBUG_OUTPUT("relativetext");
@@ -3476,7 +3478,7 @@ yy190:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 3084 "<stdout>"
+#line 3086 "<stdout>"
 yy191:
        YYDEBUG(191, *YYCURSOR);
        ++YYCURSOR;
@@ -9106,7 +9108,7 @@ yy508:
 yy509:
        YYDEBUG(509, *YYCURSOR);
 
-#line 1068 "resource/parse_date.re"
+#line 1080 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datetextual | datenoyear");
                TIMELIB_INIT;
@@ -9118,7 +9120,7 @@ yy509:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_TEXT;
        }
-#line 8077 "<stdout>"
+#line 8079 "<stdout>"
 yy510:
        YYDEBUG(510, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -9278,7 +9280,7 @@ yy526:
 yy527:
        YYDEBUG(527, *YYCURSOR);
 
-#line 1295 "resource/parse_date.re"
+#line 1307 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
@@ -9305,7 +9307,7 @@ yy527:
                TIMELIB_DEINIT;
                return TIMELIB_SHORTDATE_WITH_TIME;
        }
-#line 8228 "<stdout>"
+#line 8230 "<stdout>"
 yy528:
        YYDEBUG(528, *YYCURSOR);
        yyaccept = 7;
@@ -9618,7 +9620,7 @@ yy561:
 yy562:
        YYDEBUG(562, *YYCURSOR);
 
-#line 1042 "resource/parse_date.re"
+#line 1054 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datenoday");
                TIMELIB_INIT;
@@ -9630,7 +9632,7 @@ yy562:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_NO_DAY;
        }
-#line 8483 "<stdout>"
+#line 8485 "<stdout>"
 yy563:
        YYDEBUG(563, *YYCURSOR);
        yyaccept = 6;
@@ -9930,7 +9932,7 @@ yy587:
 yy588:
        YYDEBUG(588, *YYCURSOR);
 
-#line 1177 "resource/parse_date.re"
+#line 1189 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("pgtextshort");
                TIMELIB_INIT;
@@ -9942,7 +9944,7 @@ yy588:
                TIMELIB_DEINIT;
                return TIMELIB_PG_TEXT;
        }
-#line 8742 "<stdout>"
+#line 8744 "<stdout>"
 yy589:
        YYDEBUG(589, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -11446,7 +11448,7 @@ yy683:
 yy684:
        YYDEBUG(684, *YYCURSOR);
 
-#line 1231 "resource/parse_date.re"
+#line 1243 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("ago");
                TIMELIB_INIT;
@@ -11460,7 +11462,7 @@ yy684:
                TIMELIB_DEINIT;
                return TIMELIB_AGO;
        }
-#line 10067 "<stdout>"
+#line 10069 "<stdout>"
 yy685:
        YYDEBUG(685, *YYCURSOR);
        yyaccept = 1;
@@ -11754,127 +11756,24 @@ yy699:
                if(yych <= 'R'){
                        if(yych <= '@') goto yy3;
                        if(yych <= 'Q') goto yy49;
-                       goto yy704;
+                       goto yy709;
                } else {
-                       if(yych == 'Y') goto yy705;
+                       if(yych == 'Y') goto yy711;
                        goto yy49;
                }
        } else {
                if(yych <= 'r'){
                        if(yych <= '`') goto yy3;
                        if(yych <= 'q') goto yy49;
-                       goto yy704;
+                       goto yy709;
                } else {
-                       if(yych == 'y') goto yy705;
+                       if(yych == 'y') goto yy711;
                        if(yych <= 'z') goto yy49;
                        goto yy3;
                }
        }
 yy700:
        YYDEBUG(700, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if(yych <= 'Z'){
-               if(yych <= '@') goto yy3;
-               if(yych != 'N') goto yy49;
-               goto yy701;
-       } else {
-               if(yych <= 'm'){
-                       if(yych <= '`') goto yy3;
-                       goto yy49;
-               } else {
-                       if(yych <= 'n') goto yy701;
-                       if(yych <= 'z') goto yy49;
-                       goto yy3;
-               }
-       }
-yy701:
-       YYDEBUG(701, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if(yych <= 'Z'){
-               if(yych <= '@') goto yy151;
-               if(yych != 'D') goto yy50;
-               goto yy702;
-       } else {
-               if(yych <= 'c'){
-                       if(yych <= '`') goto yy151;
-                       goto yy50;
-               } else {
-                       if(yych <= 'd') goto yy702;
-                       if(yych <= 'z') goto yy50;
-                       goto yy151;
-               }
-       }
-yy702:
-       YYDEBUG(702, *YYCURSOR);
-       yyaccept = 1;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 'A') goto yy703;
-       if(yych != 'a') goto yy3;
-       goto yy703;
-yy703:
-       YYDEBUG(703, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if(yych == 'Y') goto yy157;
-       if(yych == 'y') goto yy157;
-       goto yy54;
-yy704:
-       YYDEBUG(704, *YYCURSOR);
-       yyaccept = 1;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '@'){
-               if(yych <= '-'){
-                       if(yych <= 0x1F)        goto yy3;
-                       if(yych <= ',') goto yy506;
-                       goto yy507;
-               } else {
-                       if(yych == '/') goto yy3;
-                       if(yych <= '9') goto yy506;
-                       goto yy3;
-               }
-       } else {
-               if(yych <= '`'){
-                       if(yych == 'C') goto yy706;
-                       if(yych <= 'Z') goto yy50;
-                       goto yy3;
-               } else {
-                       if(yych == 'c') goto yy706;
-                       if(yych <= 'z') goto yy50;
-                       goto yy3;
-               }
-       }
-yy705:
-       YYDEBUG(705, *YYCURSOR);
-       yyaccept = 1;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/'){
-               if(yych <= ','){
-                       if(yych <= 0x1F)        goto yy3;
-                       goto yy506;
-               } else {
-                       if(yych <= '-') goto yy507;
-                       if(yych <= '.') goto yy506;
-                       goto yy3;
-               }
-       } else {
-               if(yych <= 'Z'){
-                       if(yych <= '9') goto yy506;
-                       if(yych <= '@') goto yy3;
-                       goto yy50;
-               } else {
-                       if(yych <= '`') goto yy3;
-                       if(yych <= 'z') goto yy50;
-                       goto yy3;
-               }
-       }
-yy706:
-       YYDEBUG(706, *YYCURSOR);
-       yyaccept = 1;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 'H') goto yy505;
-       if(yych == 'h') goto yy505;
-       goto yy3;
-yy707:
-       YYDEBUG(707, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= 'Z'){
@@ -11883,8 +11782,8 @@ yy707:
                        if(yych <= '@') goto yy3;
                        goto yy49;
                } else {
-                       if(yych <= 'R') goto yy704;
-                       if(yych == 'Y') goto yy705;
+                       if(yych <= 'R') goto yy709;
+                       if(yych == 'Y') goto yy711;
                        goto yy49;
                }
        } else {
@@ -11894,17 +11793,17 @@ yy707:
                        goto yy52;
                } else {
                        if(yych <= 'x'){
-                               if(yych <= 'r') goto yy712;
+                               if(yych <= 'r') goto yy710;
                                goto yy52;
                        } else {
-                               if(yych <= 'y') goto yy713;
+                               if(yych <= 'y') goto yy712;
                                if(yych <= 'z') goto yy52;
                                goto yy3;
                        }
                }
        }
-yy708:
-       YYDEBUG(708, *YYCURSOR);
+yy701:
+       YYDEBUG(701, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= 'Z'){
@@ -11912,7 +11811,7 @@ yy708:
                        if(yych == '/') goto yy53;
                        goto yy3;
                } else {
-                       if(yych == 'N') goto yy701;
+                       if(yych == 'N') goto yy703;
                        goto yy49;
                }
        } else {
@@ -11920,13 +11819,60 @@ yy708:
                        if(yych == '_') goto yy53;
                        goto yy3;
                } else {
-                       if(yych == 'n') goto yy709;
+                       if(yych == 'n') goto yy706;
                        if(yych <= 'z') goto yy52;
                        goto yy3;
                }
        }
-yy709:
-       YYDEBUG(709, *YYCURSOR);
+yy702:
+       YYDEBUG(702, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych <= 'Z'){
+               if(yych <= '@') goto yy3;
+               if(yych != 'N') goto yy49;
+               goto yy703;
+       } else {
+               if(yych <= 'm'){
+                       if(yych <= '`') goto yy3;
+                       goto yy49;
+               } else {
+                       if(yych <= 'n') goto yy703;
+                       if(yych <= 'z') goto yy49;
+                       goto yy3;
+               }
+       }
+yy703:
+       YYDEBUG(703, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych <= 'Z'){
+               if(yych <= '@') goto yy151;
+               if(yych != 'D') goto yy50;
+               goto yy704;
+       } else {
+               if(yych <= 'c'){
+                       if(yych <= '`') goto yy151;
+                       goto yy50;
+               } else {
+                       if(yych <= 'd') goto yy704;
+                       if(yych <= 'z') goto yy50;
+                       goto yy151;
+               }
+       }
+yy704:
+       YYDEBUG(704, *YYCURSOR);
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'A') goto yy705;
+       if(yych != 'a') goto yy3;
+       goto yy705;
+yy705:
+       YYDEBUG(705, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych == 'Y') goto yy157;
+       if(yych == 'y') goto yy157;
+       goto yy54;
+yy706:
+       YYDEBUG(706, *YYCURSOR);
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= 'Z'){
@@ -11934,7 +11880,7 @@ yy709:
                        if(yych == '/') goto yy53;
                        goto yy151;
                } else {
-                       if(yych == 'D') goto yy702;
+                       if(yych == 'D') goto yy704;
                        goto yy50;
                }
        } else {
@@ -11942,13 +11888,13 @@ yy709:
                        if(yych == '_') goto yy53;
                        goto yy151;
                } else {
-                       if(yych == 'd') goto yy710;
+                       if(yych == 'd') goto yy707;
                        if(yych <= 'z') goto yy58;
                        goto yy151;
                }
        }
-yy710:
-       YYDEBUG(710, *YYCURSOR);
+yy707:
+       YYDEBUG(707, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '^'){
@@ -11956,7 +11902,7 @@ yy710:
                        if(yych <= '.') goto yy3;
                        goto yy53;
                } else {
-                       if(yych == 'A') goto yy703;
+                       if(yych == 'A') goto yy705;
                        goto yy3;
                }
        } else {
@@ -11964,19 +11910,44 @@ yy710:
                        if(yych <= '_') goto yy53;
                        goto yy3;
                } else {
-                       if(yych <= 'a') goto yy711;
+                       if(yych <= 'a') goto yy708;
                        if(yych <= 'z') goto yy59;
                        goto yy3;
                }
        }
-yy711:
-       YYDEBUG(711, *YYCURSOR);
+yy708:
+       YYDEBUG(708, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych == 'Y') goto yy157;
        if(yych == 'y') goto yy166;
        goto yy60;
-yy712:
-       YYDEBUG(712, *YYCURSOR);
+yy709:
+       YYDEBUG(709, *YYCURSOR);
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= '@'){
+               if(yych <= '-'){
+                       if(yych <= 0x1F)        goto yy3;
+                       if(yych <= ',') goto yy506;
+                       goto yy507;
+               } else {
+                       if(yych == '/') goto yy3;
+                       if(yych <= '9') goto yy506;
+                       goto yy3;
+               }
+       } else {
+               if(yych <= '`'){
+                       if(yych == 'C') goto yy713;
+                       if(yych <= 'Z') goto yy50;
+                       goto yy3;
+               } else {
+                       if(yych == 'c') goto yy713;
+                       if(yych <= 'z') goto yy50;
+                       goto yy3;
+               }
+       }
+yy710:
+       YYDEBUG(710, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= 'B'){
@@ -11992,7 +11963,7 @@ yy712:
                }
        } else {
                if(yych <= '_'){
-                       if(yych <= 'C') goto yy706;
+                       if(yych <= 'C') goto yy713;
                        if(yych <= 'Z') goto yy50;
                        if(yych <= '^') goto yy3;
                        goto yy53;
@@ -12007,8 +11978,32 @@ yy712:
                        }
                }
        }
-yy713:
-       YYDEBUG(713, *YYCURSOR);
+yy711:
+       YYDEBUG(711, *YYCURSOR);
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= '/'){
+               if(yych <= ','){
+                       if(yych <= 0x1F)        goto yy3;
+                       goto yy506;
+               } else {
+                       if(yych <= '-') goto yy507;
+                       if(yych <= '.') goto yy506;
+                       goto yy3;
+               }
+       } else {
+               if(yych <= 'Z'){
+                       if(yych <= '9') goto yy506;
+                       if(yych <= '@') goto yy3;
+                       goto yy50;
+               } else {
+                       if(yych <= '`') goto yy3;
+                       if(yych <= 'z') goto yy50;
+                       goto yy3;
+               }
+       }
+yy712:
+       YYDEBUG(712, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '9'){
@@ -12032,6 +12027,13 @@ yy713:
                        goto yy3;
                }
        }
+yy713:
+       YYDEBUG(713, *YYCURSOR);
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'H') goto yy505;
+       if(yych == 'h') goto yy505;
+       goto yy3;
 yy714:
        YYDEBUG(714, *YYCURSOR);
        yyaccept = 1;
@@ -13395,7 +13397,7 @@ yy787:
 yy788:
        YYDEBUG(788, *YYCURSOR);
 
-#line 1081 "resource/parse_date.re"
+#line 1093 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datenoyearrev");
                TIMELIB_INIT;
@@ -13405,7 +13407,7 @@ yy788:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_TEXT;
        }
-#line 11800 "<stdout>"
+#line 11802 "<stdout>"
 yy789:
        YYDEBUG(789, *YYCURSOR);
        yyaccept = 10;
@@ -13515,7 +13517,7 @@ yy798:
 yy799:
        YYDEBUG(799, *YYCURSOR);
 
-#line 872 "resource/parse_date.re"
+#line 884 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12");
                TIMELIB_INIT;
@@ -13531,7 +13533,7 @@ yy799:
                TIMELIB_DEINIT;
                return TIMELIB_TIME12;
        }
-#line 11904 "<stdout>"
+#line 11906 "<stdout>"
 yy800:
        YYDEBUG(800, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -13551,7 +13553,7 @@ yy801:
 yy802:
        YYDEBUG(802, *YYCURSOR);
 
-#line 889 "resource/parse_date.re"
+#line 901 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long");
@@ -13574,7 +13576,7 @@ yy802:
                TIMELIB_DEINIT;
                return TIMELIB_TIME24_WITH_ZONE;
        }
-#line 11941 "<stdout>"
+#line 11943 "<stdout>"
 yy803:
        YYDEBUG(803, *YYCURSOR);
        yyaccept = 11;
@@ -13817,7 +13819,7 @@ yy827:
 yy828:
        YYDEBUG(828, *YYCURSOR);
 
-#line 1016 "resource/parse_date.re"
+#line 1028 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datefull");
                TIMELIB_INIT;
@@ -13829,7 +13831,7 @@ yy828:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_FULL;
        }
-#line 12144 "<stdout>"
+#line 12146 "<stdout>"
 yy829:
        YYDEBUG(829, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -14464,7 +14466,7 @@ yy896:
 yy897:
        YYDEBUG(897, *YYCURSOR);
 
-#line 1029 "resource/parse_date.re"
+#line 1041 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("pointed date");
                TIMELIB_INIT;
@@ -14476,7 +14478,7 @@ yy897:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_FULL_POINTED;
        }
-#line 12653 "<stdout>"
+#line 12655 "<stdout>"
 yy898:
        YYDEBUG(898, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -15044,7 +15046,7 @@ yy942:
 yy943:
        YYDEBUG(943, *YYCURSOR);
 
-#line 1003 "resource/parse_date.re"
+#line 1015 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("gnudateshort");
                TIMELIB_INIT;
@@ -15056,7 +15058,7 @@ yy943:
                TIMELIB_DEINIT;
                return TIMELIB_ISO_DATE;
        }
-#line 13141 "<stdout>"
+#line 13143 "<stdout>"
 yy944:
        YYDEBUG(944, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -15078,7 +15080,7 @@ yy946:
 yy947:
        YYDEBUG(947, *YYCURSOR);
 
-#line 976 "resource/parse_date.re"
+#line 988 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("americanshort | american");
                TIMELIB_INIT;
@@ -15092,7 +15094,7 @@ yy947:
                TIMELIB_DEINIT;
                return TIMELIB_AMERICAN;
        }
-#line 13169 "<stdout>"
+#line 13171 "<stdout>"
 yy948:
        YYDEBUG(948, *YYCURSOR);
        yyaccept = 12;
@@ -15314,7 +15316,7 @@ yy979:
 yy980:
        YYDEBUG(980, *YYCURSOR);
 
-#line 1203 "resource/parse_date.re"
+#line 1215 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("clf");
@@ -15332,7 +15334,7 @@ yy980:
                TIMELIB_DEINIT;
                return TIMELIB_CLF;
        }
-#line 13343 "<stdout>"
+#line 13345 "<stdout>"
 yy981:
        YYDEBUG(981, *YYCURSOR);
        yyaccept = 13;
@@ -15641,7 +15643,7 @@ yy1019:
 yy1020:
        YYDEBUG(1020, *YYCURSOR);
 
-#line 1190 "resource/parse_date.re"
+#line 1202 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("pgtextreverse");
                TIMELIB_INIT;
@@ -15653,7 +15655,7 @@ yy1020:
                TIMELIB_DEINIT;
                return TIMELIB_PG_TEXT;
        }
-#line 13583 "<stdout>"
+#line 13585 "<stdout>"
 yy1021:
        YYDEBUG(1021, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -15786,7 +15788,7 @@ yy1031:
 yy1032:
        YYDEBUG(1032, *YYCURSOR);
 
-#line 1222 "resource/parse_date.re"
+#line 1234 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("year4");
                TIMELIB_INIT;
@@ -15794,7 +15796,7 @@ yy1032:
                TIMELIB_DEINIT;
                return TIMELIB_CLF;
        }
-#line 13699 "<stdout>"
+#line 13701 "<stdout>"
 yy1033:
        YYDEBUG(1033, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -15930,7 +15932,7 @@ yy1040:
 yy1041:
        YYDEBUG(1041, *YYCURSOR);
 
-#line 1055 "resource/parse_date.re"
+#line 1067 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datenodayrev");
                TIMELIB_INIT;
@@ -15942,7 +15944,7 @@ yy1041:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_NO_DAY;
        }
-#line 13826 "<stdout>"
+#line 13828 "<stdout>"
 yy1042:
        YYDEBUG(1042, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -16151,7 +16153,7 @@ yy1060:
 yy1061:
        YYDEBUG(1061, *YYCURSOR);
 
-#line 1158 "resource/parse_date.re"
+#line 1170 "resource/parse_date.re"
 {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweek");
@@ -16169,7 +16171,7 @@ yy1061:
                TIMELIB_DEINIT;
                return TIMELIB_ISO_WEEK;
        }
-#line 14013 "<stdout>"
+#line 14015 "<stdout>"
 yy1062:
        YYDEBUG(1062, *YYCURSOR);
        ++YYCURSOR;
@@ -16177,7 +16179,7 @@ yy1062:
 yy1063:
        YYDEBUG(1063, *YYCURSOR);
 
-#line 1139 "resource/parse_date.re"
+#line 1151 "resource/parse_date.re"
 {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweekday");
@@ -16195,7 +16197,7 @@ yy1063:
                TIMELIB_DEINIT;
                return TIMELIB_ISO_WEEK;
        }
-#line 14035 "<stdout>"
+#line 14037 "<stdout>"
 yy1064:
        YYDEBUG(1064, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -16264,7 +16266,7 @@ yy1066:
 yy1067:
        YYDEBUG(1067, *YYCURSOR);
 
-#line 1126 "resource/parse_date.re"
+#line 1138 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("pgydotd");
                TIMELIB_INIT;
@@ -16276,7 +16278,7 @@ yy1067:
                TIMELIB_DEINIT;
                return TIMELIB_PG_YEARDAY;
        }
-#line 14108 "<stdout>"
+#line 14110 "<stdout>"
 yy1068:
        YYDEBUG(1068, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -16391,7 +16393,7 @@ yy1073:
 yy1074:
        YYDEBUG(1074, *YYCURSOR);
 
-#line 1092 "resource/parse_date.re"
+#line 1104 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("datenocolon");
                TIMELIB_INIT;
@@ -16402,7 +16404,7 @@ yy1074:
                TIMELIB_DEINIT;
                return TIMELIB_DATE_NOCOLON;
        }
-#line 14216 "<stdout>"
+#line 14218 "<stdout>"
 yy1075:
        YYDEBUG(1075, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -16500,7 +16502,7 @@ yy1084:
 yy1085:
        YYDEBUG(1085, *YYCURSOR);
 
-#line 1104 "resource/parse_date.re"
+#line 1116 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx");
@@ -16521,7 +16523,7 @@ yy1085:
                TIMELIB_DEINIT;
                return TIMELIB_XMLRPC_SOAP;
        }
-#line 14313 "<stdout>"
+#line 14315 "<stdout>"
 yy1086:
        YYDEBUG(1086, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17124,7 +17126,7 @@ yy1175:
 yy1176:
        YYDEBUG(1176, *YYCURSOR);
 
-#line 991 "resource/parse_date.re"
+#line 1003 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("iso8601date | iso8601dateslash | dateslash");
                TIMELIB_INIT;
@@ -17135,7 +17137,7 @@ yy1176:
                TIMELIB_DEINIT;
                return TIMELIB_ISO_DATE;
        }
-#line 14745 "<stdout>"
+#line 14747 "<stdout>"
 yy1177:
        YYDEBUG(1177, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17950,7 +17952,7 @@ yy1268:
 yy1269:
        YYDEBUG(1269, *YYCURSOR);
 
-#line 913 "resource/parse_date.re"
+#line 925 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("gnunocolon");
                TIMELIB_INIT;
@@ -17971,7 +17973,7 @@ yy1269:
                TIMELIB_DEINIT;
                return TIMELIB_GNU_NOCOLON;
        }
-#line 15392 "<stdout>"
+#line 15394 "<stdout>"
 yy1270:
        YYDEBUG(1270, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -18068,7 +18070,7 @@ yy1276:
 yy1277:
        YYDEBUG(1277, *YYCURSOR);
 
-#line 958 "resource/parse_date.re"
+#line 970 "resource/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("iso8601nocolon");
@@ -18085,7 +18087,7 @@ yy1277:
                TIMELIB_DEINIT;
                return TIMELIB_ISO_NOCOLON;
        }
-#line 15490 "<stdout>"
+#line 15492 "<stdout>"
 yy1278:
        YYDEBUG(1278, *YYCURSOR);
        yyaccept = 21;
@@ -18382,7 +18384,7 @@ yy1301:
 yy1302:
        YYDEBUG(1302, *YYCURSOR);
 
-#line 848 "resource/parse_date.re"
+#line 860 "resource/parse_date.re"
 {
                timelib_ull i;
 
@@ -18405,7 +18407,7 @@ yy1302:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 15754 "<stdout>"
+#line 15756 "<stdout>"
 yy1303:
        YYDEBUG(1303, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -18476,7 +18478,7 @@ yy1310:
 yy1311:
        YYDEBUG(1311, *YYCURSOR);
 
-#line 836 "resource/parse_date.re"
+#line 848 "resource/parse_date.re"
 {
                DEBUG_OUTPUT("tomorrow");
                TIMELIB_INIT;
@@ -18487,7 +18489,7 @@ yy1311:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 15818 "<stdout>"
+#line 15820 "<stdout>"
 yy1312:
        YYDEBUG(1312, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -18500,48 +18502,95 @@ yy1313:
 yy1314:
        YYDEBUG(1314, *YYCURSOR);
 
-#line 826 "resource/parse_date.re"
+#line 838 "resource/parse_date.re"
 {
-               DEBUG_OUTPUT("today");
+               DEBUG_OUTPUT("midnight | today");
                TIMELIB_INIT;
                TIMELIB_UNHAVE_TIME();
 
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 15834 "<stdout>"
+#line 15836 "<stdout>"
 yy1315:
        YYDEBUG(1315, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= '`'){
-               if(yych <= 'U'){
+               if(yych <= '@') goto yy3;
+               if(yych <= 'Z') goto yy49;
+               goto yy3;
+       } else {
+               if(yych == 'd') goto yy1316;
+               if(yych <= 'z') goto yy49;
+               goto yy3;
+       }
+yy1316:
+       YYDEBUG(1316, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych <= '`'){
+               if(yych <= '@') goto yy3;
+               if(yych <= 'Z') goto yy50;
+               goto yy3;
+       } else {
+               if(yych == 'n') goto yy1317;
+               if(yych <= 'z') goto yy50;
+               goto yy3;
+       }
+yy1317:
+       YYDEBUG(1317, *YYCURSOR);
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych != 'i') goto yy3;
+       goto yy1318;
+yy1318:
+       YYDEBUG(1318, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych != 'g') goto yy54;
+       goto yy1319;
+yy1319:
+       YYDEBUG(1319, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych != 'h') goto yy54;
+       goto yy1320;
+yy1320:
+       YYDEBUG(1320, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych == 't') goto yy1313;
+       goto yy54;
+yy1321:
+       YYDEBUG(1321, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych <= 'n'){
+               if(yych <= 'V'){
                        if(yych <= '@') goto yy3;
-                       goto yy49;
+                       if(yych <= 'U') goto yy49;
+                       goto yy612;
                } else {
-                       if(yych <= 'V') goto yy612;
                        if(yych <= 'Z') goto yy49;
-                       goto yy3;
+                       if(yych <= '`') goto yy3;
+                       goto yy49;
                }
        } else {
                if(yych <= 'v'){
+                       if(yych <= 'o') goto yy1324;
                        if(yych <= 'u') goto yy49;
                        goto yy612;
                } else {
-                       if(yych <= 'w') goto yy1316;
+                       if(yych <= 'w') goto yy1322;
                        if(yych <= 'z') goto yy49;
                        goto yy3;
                }
        }
-yy1316:
-       YYDEBUG(1316, *YYCURSOR);
+yy1322:
+       YYDEBUG(1322, *YYCURSOR);
        ++YYCURSOR;
-       if((yych = *YYCURSOR) <= '@')   goto yy1317;
+       if((yych = *YYCURSOR) <= '@')   goto yy1323;
        if(yych <= 'Z') goto yy50;
-       if(yych <= '`') goto yy1317;
+       if(yych <= '`') goto yy1323;
        if(yych <= 'z') goto yy50;
-       goto yy1317;
-yy1317:
-       YYDEBUG(1317, *YYCURSOR);
+       goto yy1323;
+yy1323:
+       YYDEBUG(1323, *YYCURSOR);
 
 #line 817 "resource/parse_date.re"
 {
@@ -18551,63 +18600,94 @@ yy1317:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 15870 "<stdout>"
-yy1318:
-       YYDEBUG(1318, *YYCURSOR);
+#line 15907 "<stdout>"
+yy1324:
+       YYDEBUG(1324, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if(yych <= '`'){
+               if(yych <= '@') goto yy3;
+               if(yych <= 'Z') goto yy50;
+               goto yy3;
+       } else {
+               if(yych == 'n') goto yy1325;
+               if(yych <= 'z') goto yy50;
+               goto yy3;
+       }
+yy1325:
+       YYDEBUG(1325, *YYCURSOR);
+       ++YYCURSOR;
+       goto yy1326;
+yy1326:
+       YYDEBUG(1326, *YYCURSOR);
+
+#line 826 "resource/parse_date.re"
+{
+               DEBUG_OUTPUT("noon");
+               TIMELIB_INIT;
+               TIMELIB_UNHAVE_TIME();
+               TIMELIB_HAVE_TIME();
+               s->time->h = 12;
+
+               TIMELIB_DEINIT;
+               return TIMELIB_RELATIVE;
+       }
+#line 15932 "<stdout>"
+yy1327:
+       YYDEBUG(1327, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= '`'){
                if(yych <= '@') goto yy3;
                if(yych <= 'Z') goto yy49;
                goto yy3;
        } else {
-               if(yych == 's') goto yy1319;
+               if(yych == 's') goto yy1328;
                if(yych <= 'z') goto yy49;
                goto yy3;
        }
-yy1319:
-       YYDEBUG(1319, *YYCURSOR);
+yy1328:
+       YYDEBUG(1328, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych <= '`'){
                if(yych <= '@') goto yy3;
                if(yych <= 'Z') goto yy50;
                goto yy3;
        } else {
-               if(yych == 't') goto yy1320;
+               if(yych == 't') goto yy1329;
                if(yych <= 'z') goto yy50;
                goto yy3;
        }
-yy1320:
-       YYDEBUG(1320, *YYCURSOR);
+yy1329:
+       YYDEBUG(1329, *YYCURSOR);
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych != 'e') goto yy3;
-       goto yy1321;
-yy1321:
-       YYDEBUG(1321, *YYCURSOR);
+       goto yy1330;
+yy1330:
+       YYDEBUG(1330, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych != 'r') goto yy54;
-       goto yy1322;
-yy1322:
-       YYDEBUG(1322, *YYCURSOR);
+       goto yy1331;
+yy1331:
+       YYDEBUG(1331, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych != 'd') goto yy54;
-       goto yy1323;
-yy1323:
-       YYDEBUG(1323, *YYCURSOR);
+       goto yy1332;
+yy1332:
+       YYDEBUG(1332, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych != 'a') goto yy54;
-       goto yy1324;
-yy1324:
-       YYDEBUG(1324, *YYCURSOR);
+       goto yy1333;
+yy1333:
+       YYDEBUG(1333, *YYCURSOR);
        yych = *++YYCURSOR;
        if(yych != 'y') goto yy54;
-       goto yy1325;
-yy1325:
-       YYDEBUG(1325, *YYCURSOR);
+       goto yy1334;
+yy1334:
+       YYDEBUG(1334, *YYCURSOR);
        ++YYCURSOR;
-       goto yy1326;
-yy1326:
-       YYDEBUG(1326, *YYCURSOR);
+       goto yy1335;
+yy1335:
+       YYDEBUG(1335, *YYCURSOR);
 
 #line 805 "resource/parse_date.re"
 {
@@ -18620,10 +18700,10 @@ yy1326:
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 15921 "<stdout>"
+#line 15983 "<stdout>"
 }
 }
-#line 1355 "resource/parse_date.re"
+#line 1367 "resource/parse_date.re"
 
 }
 
index d332c8f20408ee2b623e79b2325c29897a001087..1fdbfec55e2f2616c2b14054223ff0c38d79b5b2 100644 (file)
@@ -822,9 +822,21 @@ relativetext = (reltextnumber space? reltextunit)+;
                return TIMELIB_RELATIVE;
        }
 
-       "today"
+       "noon"
        {
-               DEBUG_OUTPUT("today");
+               DEBUG_OUTPUT("noon");
+               TIMELIB_INIT;
+               TIMELIB_UNHAVE_TIME();
+               TIMELIB_HAVE_TIME();
+               s->time->h = 12;
+
+               TIMELIB_DEINIT;
+               return TIMELIB_RELATIVE;
+       }
+
+       "midnight" | "today"
+       {
+               DEBUG_OUTPUT("midnight | today");
                TIMELIB_INIT;
                TIMELIB_UNHAVE_TIME();
 
index d332c8f20408ee2b623e79b2325c29897a001087..1fdbfec55e2f2616c2b14054223ff0c38d79b5b2 100644 (file)
@@ -822,9 +822,21 @@ relativetext = (reltextnumber space? reltextunit)+;
                return TIMELIB_RELATIVE;
        }
 
-       "today"
+       "noon"
        {
-               DEBUG_OUTPUT("today");
+               DEBUG_OUTPUT("noon");
+               TIMELIB_INIT;
+               TIMELIB_UNHAVE_TIME();
+               TIMELIB_HAVE_TIME();
+               s->time->h = 12;
+
+               TIMELIB_DEINIT;
+               return TIMELIB_RELATIVE;
+       }
+
+       "midnight" | "today"
+       {
+               DEBUG_OUTPUT("midnight | today");
                TIMELIB_INIT;
                TIMELIB_UNHAVE_TIME();
 
diff --git a/ext/date/tests/bug34676.phpt b/ext/date/tests/bug34676.phpt
new file mode 100644 (file)
index 0000000..6f616fe
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #34676 (missing support for strtotime("midnight") and strtotime("noon"))
+--FILE--
+<?php
+date_default_timezone_set("UTC");
+
+$tests = array(
+       'noon', 'midnight'
+);
+
+foreach ($tests as $test) {
+       $t = strtotime("2005-12-22 ". $test);
+       printf("%-10s => %s\n", $test, date(DATE_ISO8601, $t));
+}
+
+?>
+--EXPECT--
+noon       => 2005-12-22T12:00:00+0000
+midnight   => 2005-12-22T00:00:00+0000