@@ -17,7 +17,7 @@ public static partial class QueryBuilder
1717 private static readonly Regex FolderRegex = new Regex ( "\\ bfolder:\\ s*(?:\" (?<value>[^\" ]+)\" |(?<value>\\ S+))" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
1818 private static readonly Regex PathRegex = new Regex ( "\\ bpath:\\ s*(?:(?<criteria>starts with|contains|ends with)\\ s+)?(?:\" (?<value>[^\" ]+)\" |(?<value>\\ S+))" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
1919
20- private static readonly Regex DateRegex = new Regex ( "\\ bdate:\\ s*(?:(?<prep1>between|before|since|from)\\ s+)?(?<date1>today|yesterday|\\ d+ day(?:s)? ago|(?:a|1|2|3) week(?:s)? ago|(?:a|\\ d{1,2}) month(?:s)? ago|\\ d{1,2}[-/]\\ d{1,2}[-/]\\ d{4}|\\ d{4}[-/]\\ d{1,2}[-/]\\ d{1,2})(?:\\ s+(?<prep2>and|up to|to)\\ s+(?<date2>today|yesterday|\\ d+ day(?:s)? ago|(?:a|1|2|3) week(?:s)? ago|(?:a|\\ d{1,2}) month(?:s)? ago|\\ d{1,2}[-/]\\ d{1,2}[-/]\\ d{4}|\\ d{4}[-/]\\ d{1,2}[-/]\\ d{1,2}))?\\ b" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
20+ private static readonly Regex DateRegex = new Regex ( "\\ bdate:\\ s*(?:(?<prep1>between|before|since|from)\\ s+)?(?<date1>today|yesterday|\\ d+ day(?:s)? ago|(?:a|1|2|3) week(?:s)? ago|(?:a|\\ d{1,2}) month(?:s)? ago|\\ d{1,2}[-/]\\ d{1,2}[-/]\\ d{4}|\\ d{4}[-/]\\ d{1,2}[-/]\\ d{1,2})(?:\\ s+(?<prep2>and|up to|to|- )\\ s+(?<date2>today|yesterday|\\ d+ day(?:s)? ago|(?:a|1|2|3) week(?:s)? ago|(?:a|\\ d{1,2}) month(?:s)? ago|\\ d{1,2}[-/]\\ d{1,2}[-/]\\ d{4}|\\ d{4}[-/]\\ d{1,2}[-/]\\ d{1,2}))?\\ b" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
2121
2222 private static readonly Regex SeedRegex = new Regex ( "\\ bseed:\\ s*(?<start>[0-9?*]+)(?:\\ s*-\\ s*(?<end>\\ S+))?" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
2323 private static readonly Regex StepsRegex = new Regex ( "\\ bsteps:\\ s*(\\ d+)(?:\\ |(\\ d+))*\\ b" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ;
@@ -818,8 +818,8 @@ private static void ParseDate(ref string prompt, List<KeyValuePair<string, objec
818818 var date1 = match . Groups [ "date1" ] . Value ;
819819 var date2 = match . Groups [ "date2" ] . Value ;
820820
821- var prep1 = match . Groups [ "prep1" ] . Value ;
822- var prep2 = match . Groups [ "prep2" ] . Value ;
821+ var prep1Match = match . Groups [ "prep1" ] ;
822+ var prep2Match = match . Groups [ "prep2" ] ;
823823
824824 var date = ParseDate ( date1 ) ;
825825
@@ -828,8 +828,13 @@ private static void ParseDate(ref string prompt, List<KeyValuePair<string, objec
828828 var start = date . Date ;
829829 var end = date . Date ;
830830
831- if ( ! string . IsNullOrEmpty ( prep1 ) )
831+ var prep2 = prep2Match . Value ;
832+
833+
834+ if ( prep1Match . Success )
832835 {
836+ var prep1 = prep1Match . Value ;
837+
833838 switch ( prep1 . ToLower ( ) )
834839 {
835840 case "between" :
@@ -879,6 +884,19 @@ private static void ParseDate(ref string prompt, List<KeyValuePair<string, objec
879884 break ;
880885 }
881886 }
887+ else
888+ {
889+ if ( ! string . IsNullOrEmpty ( prep2 ) && prep2 . ToLower ( ) == "-" )
890+ {
891+ if ( ! string . IsNullOrEmpty ( date2 ) )
892+ {
893+ var endDate = ParseDate ( date2 ) ;
894+ end = endDate . Date ;
895+ }
896+ else
897+ throw new Exception ( "Expected: end date" ) ;
898+ }
899+ }
882900
883901 end = end . AddDays ( 1 ) . Subtract ( TimeSpan . FromSeconds ( 1 ) ) ;
884902
0 commit comments