Skip to content

Commit

Permalink
SM-4899 Support weekday intervals
Browse files Browse the repository at this point in the history
  • Loading branch information
jhammerGSG committed May 29, 2024
1 parent 5ced255 commit ceac091
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
14 changes: 12 additions & 2 deletions lib/Date/RangeParser/EN.pm
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,19 @@ sub parse_range
$string =~ s/2nd$/second/;

# Handle weekdays as we do business days
# We are going to mimic what we do for business days and let it
# fall into Date::Manip since we can handle business days there.
if ($string =~ /^(?:last|past)\s?(\d+)?\s?weekdays?/) {
my $interval = $1 || 1;
$string =~ s/^(?:last|past)\s?(\d+)?\s?weekdays?/$interval business days ago/;
if ($interval == 1) {
$string =~ s/^(?:last|past)\s?(\d+)?\s?weekdays?/$interval business days ago/;
} else {
$string =~ s/^(?:last|past)\s?(\d+)?\s?weekdays?/past $interval business days/;
}
}
if ($string =~ /^(\d+)?\s?weekdays? ago/) {
my $interval = $1 || 1;
$string =~ s/^(\d+)?\s?weekdays? ago/$interval business days ago/;
}

# Sometimes we get a bare US style date, but the user has used dashes.
Expand Down Expand Up @@ -897,7 +907,7 @@ sub parse_range

# past N business days
# generally includes today, unless it is being run on a weekend.
if ($string =~ /^past (\d+)? (business day)(s?)$/) {
if ($string =~ /^(?:last|past) (\d+)? (business day)(s?)$/) {

$beg->set(%BOD);
my $bdow = $beg->day_of_week % 7; # Monday == 1
Expand Down
15 changes: 15 additions & 0 deletions t/01-parse_range.t
Original file line number Diff line number Diff line change
Expand Up @@ -904,6 +904,21 @@ my @tests = (
as_of => '2024-04-29 07:23:00',
beg => '04/26/2024 12:00:00AM',
end => '04/26/2024 11:59:59PM',
}, {
date_range_string => 'last 10 weekdays',
as_of => '2024-05-28 07:23:00',
beg => '05/15/2024 12:00:00AM',
end => '05/28/2024 11:59:59PM',
}, {
date_range_string => '10 weekdays ago',
as_of => '2024-05-28 07:23:00',
beg => '05/14/2024 12:00:00AM',
end => '05/14/2024 11:59:59PM',
}, {
date_range_string => '10 weekdays ago at noon - 8 weekdays ago at noon',
as_of => '2024-05-28 07:23:00',
beg => '05/14/2024 12:00:00PM',
end => '05/16/2024 12:00:00PM',
}
);

Expand Down

0 comments on commit ceac091

Please sign in to comment.