From 07c39fffca5cd1eece455ea66cb9fb660fae7890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Eustace?= Date: Fri, 6 Mar 2020 14:13:41 +0100 Subject: [PATCH] Fix week of month calculation --- pendulum/date.py | 4 +++- tests/date/test_getters.py | 7 +++++-- tests/datetime/test_getters.py | 7 +++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pendulum/date.py b/pendulum/date.py index 7f2f1fdb..9111db75 100644 --- a/pendulum/date.py +++ b/pendulum/date.py @@ -76,7 +76,9 @@ def days_in_month(self): @property def week_of_month(self): - return int(math.ceil(self.day / DAYS_PER_WEEK)) + first_day_of_month = self.replace(day=1) + + return self.week_of_year - first_day_of_month.week_of_year + 1 @property def age(self): diff --git a/tests/date/test_getters.py b/tests/date/test_getters.py index eda58447..3d95ae30 100644 --- a/tests/date/test_getters.py +++ b/tests/date/test_getters.py @@ -52,10 +52,13 @@ def test_is_long_year(): def test_week_of_month(): assert pendulum.Date(2012, 9, 30).week_of_month == 5 - assert pendulum.Date(2012, 9, 28).week_of_month == 4 - assert pendulum.Date(2012, 9, 20).week_of_month == 3 + assert pendulum.Date(2012, 9, 28).week_of_month == 5 + assert pendulum.Date(2012, 9, 20).week_of_month == 4 assert pendulum.Date(2012, 9, 8).week_of_month == 2 assert pendulum.Date(2012, 9, 1).week_of_month == 1 + assert pendulum.date(2020, 1, 1).week_of_month == 1 + assert pendulum.date(2020, 1, 7).week_of_month == 2 + assert pendulum.date(2020, 1, 14).week_of_month == 3 def test_week_of_year_first_week(): diff --git a/tests/datetime/test_getters.py b/tests/datetime/test_getters.py index d4abb03e..64971efc 100644 --- a/tests/datetime/test_getters.py +++ b/tests/datetime/test_getters.py @@ -185,10 +185,13 @@ def test_is_long_year(): def test_week_of_month(): assert pendulum.datetime(2012, 9, 30).week_of_month == 5 - assert pendulum.datetime(2012, 9, 28).week_of_month == 4 - assert pendulum.datetime(2012, 9, 20).week_of_month == 3 + assert pendulum.datetime(2012, 9, 28).week_of_month == 5 + assert pendulum.datetime(2012, 9, 20).week_of_month == 4 assert pendulum.datetime(2012, 9, 8).week_of_month == 2 assert pendulum.datetime(2012, 9, 1).week_of_month == 1 + assert pendulum.datetime(2020, 1, 1).week_of_month == 1 + assert pendulum.datetime(2020, 1, 7).week_of_month == 2 + assert pendulum.datetime(2020, 1, 14).week_of_month == 3 def test_week_of_year_first_week():