Skip to content

Commit 00b7fdd

Browse files
authored
Fix week of month calculation (#446)
1 parent 9af9efe commit 00b7fdd

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

pendulum/date.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ def days_in_month(self):
7676

7777
@property
7878
def week_of_month(self):
79-
return int(math.ceil(self.day / DAYS_PER_WEEK))
79+
first_day_of_month = self.replace(day=1)
80+
81+
return self.week_of_year - first_day_of_month.week_of_year + 1
8082

8183
@property
8284
def age(self):

tests/date/test_getters.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,13 @@ def test_is_long_year():
5252

5353
def test_week_of_month():
5454
assert pendulum.Date(2012, 9, 30).week_of_month == 5
55-
assert pendulum.Date(2012, 9, 28).week_of_month == 4
56-
assert pendulum.Date(2012, 9, 20).week_of_month == 3
55+
assert pendulum.Date(2012, 9, 28).week_of_month == 5
56+
assert pendulum.Date(2012, 9, 20).week_of_month == 4
5757
assert pendulum.Date(2012, 9, 8).week_of_month == 2
5858
assert pendulum.Date(2012, 9, 1).week_of_month == 1
59+
assert pendulum.date(2020, 1, 1).week_of_month == 1
60+
assert pendulum.date(2020, 1, 7).week_of_month == 2
61+
assert pendulum.date(2020, 1, 14).week_of_month == 3
5962

6063

6164
def test_week_of_year_first_week():

tests/datetime/test_getters.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,13 @@ def test_is_long_year():
185185

186186
def test_week_of_month():
187187
assert pendulum.datetime(2012, 9, 30).week_of_month == 5
188-
assert pendulum.datetime(2012, 9, 28).week_of_month == 4
189-
assert pendulum.datetime(2012, 9, 20).week_of_month == 3
188+
assert pendulum.datetime(2012, 9, 28).week_of_month == 5
189+
assert pendulum.datetime(2012, 9, 20).week_of_month == 4
190190
assert pendulum.datetime(2012, 9, 8).week_of_month == 2
191191
assert pendulum.datetime(2012, 9, 1).week_of_month == 1
192+
assert pendulum.datetime(2020, 1, 1).week_of_month == 1
193+
assert pendulum.datetime(2020, 1, 7).week_of_month == 2
194+
assert pendulum.datetime(2020, 1, 14).week_of_month == 3
192195

193196

194197
def test_week_of_year_first_week():

0 commit comments

Comments
 (0)