week_of_month returns 6, although months can only have 5 weeks max
Opened this issue · 3 comments
- I am on the latest Pendulum version.
pendulum==3.0.0
- I have searched the issues of this repo and believe that this is not a duplicate.
There are no current open issues. The closest one I could find is one that was opened in 2020. Most of the issues with this property have to do with negative values; however this issue seems to be more about miscounting
- OS version and name: MacOS Sequoia
- Pendulum version: 3.0.0
Issue
Was playing around with the week_of_month property and found some interesting behavior:
The following:
err_dt = pendulum.datetime(2024, 9, 30, tz='America/Los_Angeles')
err_dt.week_of_month
Results in this output:
6
I'm a bit confused by this behavior and believe it should be a bug because September 2024 should have the following week breakdowns:
Week 1: September 1st, Sunday -> September 8th Sunday
Week 2: September 8th, Sunday -> September 15th Sunday
Week 3: September 15th Sunday -> September 22nd Sunday
Week 4: September 22nd Sunday -> September 29th Sunday
Week 5: September 29th Sunday -> September 30th Monday (last date in September)
I don't about this very case. But depending on which day you take as your week start you could have 6 distinct weeks.
consider september 2024 and monday as your starting day you get:
week 1: 01 => Sunday
week 2: 02 (Monday) => 08 (Sunday)
week 3: 09 => 15
week 4: 16 => 22
week 5: 23 => 29
week 6: 30 => Monday
maybe this has to do with that.
But in any case the "6-week" months is a real thing in any case.
I see, I wasn't considering the case where we define a starting day. I was strictly considering whatever day the 1st of the month is as the beginning of the "week counter." I guess it boils down to what the intended/expected behavior of this function is.
I cannot speak for the intention but the code relies on isoweekday not on weekday so Monday will be considered as day 1 (of any given week):
@property
def week_of_month(self) -> int:
return math.ceil((self.day + self.first_of("month").isoweekday() - 1) / 7)