From: Scott Gasch Date: Fri, 13 May 2022 02:14:34 +0000 (-0700) Subject: Fix an edge condition around the Nth weekday of the month when X-Git-Url: https://wannabe.guru.org/gitweb/?a=commitdiff_plain;h=a778719a55da82f5a3d1ca5cecd9041530d4d6e9;p=python_utils.git Fix an edge condition around the Nth weekday of the month when the first day of the month is that target weekday. --- diff --git a/dateparse/dateparse_utils.py b/dateparse/dateparse_utils.py index bd0d491..ee2bbd9 100755 --- a/dateparse/dateparse_utils.py +++ b/dateparse/dateparse_utils.py @@ -672,10 +672,10 @@ class DateParser(dateparse_utilsListener): del self.context['dow'] self.context['delta_unit'] = dow - # For the nth Fooday in Month, start at the 1st of the - # month and count ahead N Foodays. For the last Fooday in - # Month, start at the last of the month and count back one - # Fooday. + # For the nth Fooday in Month, start at the last day of + # the previous month count ahead N Foodays. For the last + # Fooday in Month, start at the last of the month and + # count back one Fooday. if n == -1: month += 1 if month == 13: @@ -684,17 +684,16 @@ class DateParser(dateparse_utilsListener): tmp_date = datetime.date(year=year, month=month, day=1) tmp_date = tmp_date - datetime.timedelta(days=1) - self.context['year'] = tmp_date.year - self.context['month'] = tmp_date.month - self.context['day'] = tmp_date.day - # The delta adjustment code can handle the case where # the last day of the month is the day we're looking # for already. else: - self.context['year'] = year - self.context['month'] = month - self.context['day'] = 1 + tmp_date = datetime.date(year=year, month=month, day=1) + tmp_date = tmp_date - datetime.timedelta(days=1) + + self.context['year'] = tmp_date.year + self.context['month'] = tmp_date.month + self.context['day'] = tmp_date.day self.main_type = DateParser.PARSE_TYPE_BASE_AND_OFFSET_EXPR except Exception as e: raise ParseException(f'Invalid nthWeekday expression: {ctx.getText()}') from e diff --git a/tests/dateparse_utils_test.py b/tests/dateparse_utils_test.py index 6e539ff..8dd8131 100755 --- a/tests/dateparse_utils_test.py +++ b/tests/dateparse_utils_test.py @@ -73,6 +73,7 @@ parsable_expressions = [ ('2 sun in jun', datetime.datetime(2021, 6, 13)), ('easter -40 days', datetime.datetime(2021, 2, 23)), ('easter +39 days', datetime.datetime(2021, 5, 13)), + ('2nd Sunday in May, 2022', datetime.datetime(2022, 5, 8)), ('1st tuesday in nov, 2024', datetime.datetime(2024, 11, 5)), ( '2 days before last xmas at 3:14:15.92a',