Skip to content

Commit f952c8d

Browse files
committed
Extends date range parser to support new formats
Adds support for "TO" delimiter and bracket syntax to the two-part date range parser. This allows for more flexible date range input formats, including those used by Elasticsearch.
1 parent 904ea19 commit f952c8d

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/TwoPartFormatParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
88
[Priority(25)]
99
public class TwoPartFormatParser : IFormatParser
1010
{
11-
private static readonly Regex _beginRegex = new(@"^\s*");
11+
private static readonly Regex _beginRegex = new(@"^\s*(?:[\[\{])?\s*");
1212
private static readonly Regex _delimiterRegex = new(@"\G(?:\s*-\s*|\s+TO\s+)", RegexOptions.IgnoreCase);
13-
private static readonly Regex _endRegex = new(@"\G\s*$");
13+
private static readonly Regex _endRegex = new(@"\G\s*(?:[\]\}])?\s*$");
1414

1515
public TwoPartFormatParser()
1616
{

tests/Exceptionless.DateTimeExtensions.Tests/FormatParsers/TwoPartFormatParserTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,32 @@ public static IEnumerable<object[]> Inputs
2222
get
2323
{
2424
return new[] {
25+
// Original dash delimiter syntax
2526
new object[] { "2012-2013", _now.ChangeYear(2012).StartOfYear(), _now.ChangeYear(2013).EndOfYear() },
2627
new object[] { "5 days ago - now", _now.SubtractDays(5).StartOfDay(), _now },
2728
new object[] { "jan-feb", _now.ChangeMonth(1).StartOfMonth(), _now.ChangeMonth(2).EndOfMonth() },
2829
new object[] { "now-this feb", _now, _now.AddYears(1).ChangeMonth(2).EndOfMonth() },
30+
31+
// TO delimiter syntax (case-insensitive)
32+
new object[] { "2012 TO 2013", _now.ChangeYear(2012).StartOfYear(), _now.ChangeYear(2013).EndOfYear() },
33+
new object[] { "jan to feb", _now.ChangeMonth(1).StartOfMonth(), _now.ChangeMonth(2).EndOfMonth() },
34+
new object[] { "5 days ago TO now", _now.SubtractDays(5).StartOfDay(), _now },
35+
36+
// Elasticsearch bracket syntax
37+
new object[] { "[2012 TO 2013]", _now.ChangeYear(2012).StartOfYear(), _now.ChangeYear(2013).EndOfYear() },
38+
new object[] { "{jan TO feb}", _now.ChangeMonth(1).StartOfMonth(), _now.ChangeMonth(2).EndOfMonth() },
39+
new object[] { "[2012-2013]", _now.ChangeYear(2012).StartOfYear(), _now.ChangeYear(2013).EndOfYear() },
40+
41+
// Wildcard support
42+
new object[] { "* TO 2013", DateTime.MinValue, _now.ChangeYear(2013).EndOfYear() },
43+
new object[] { "2012 TO *", _now.ChangeYear(2012).StartOfYear(), DateTime.MaxValue},
44+
new object[] { "[* TO 2013]", DateTime.MinValue, _now.ChangeYear(2013).EndOfYear() },
45+
new object[] { "{2012 TO *}", _now.ChangeYear(2012).StartOfYear(), DateTime.MaxValue },
46+
47+
// Invalid inputs
2948
new object[] { "blah", null, null },
30-
new object[] { "blah blah", null, null }
49+
new object[] { "[invalid", null, null },
50+
new object[] { "invalid}", null, null }
3151
};
3252
}
3353
}

0 commit comments

Comments
 (0)