diff --git a/fixedcal/core/date.py b/fixedcal/core/date.py index a9437a2..afa6c0b 100644 --- a/fixedcal/core/date.py +++ b/fixedcal/core/date.py @@ -1,4 +1,5 @@ from datetime import datetime +from math import floor class FixedDate: def __init__(self, date = None, day_of_year = None, year = None): @@ -35,6 +36,10 @@ class FixedDate: """ return (day_of_year, year) + @property + def day_of_year(self): + return self._day_of_year + @property def day_of_month(self): """In range 1...29""" @@ -54,7 +59,17 @@ class FixedDate: def is_year_day(self) -> bool: return self.month == 14 and self.day_of_month == 1 - # TODO: week of month + @property + def week_of_month(self) -> int: + """The ordinal of the week in month. Value 1 for year day. + + Returns: + int: In range 1...4 + """ + if self.is_year_day: + return 1 + return ((self.day_of_month-1) // 7) + 1 + # TODO: week of year # TODO: weekday # TODO: year quarter diff --git a/tests/basic_datetime_test.py b/tests/basic_datetime_test.py index ca2d2c9..5cb8ee8 100644 --- a/tests/basic_datetime_test.py +++ b/tests/basic_datetime_test.py @@ -8,18 +8,24 @@ class TestBasicDatetimeInit(unittest.TestCase): self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 1) self.assertEqual(fixed_date.day_of_month, 1) + self.assertEqual(fixed_date.day_of_year, 1) + self.assertEqual(fixed_date.week_of_month, 1) def test_datetime_init_february_last(self): fixed_date = FixedDate(date=datetime(2022, 2, 25)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 2) self.assertEqual(fixed_date.day_of_month, 28) + self.assertEqual(fixed_date.day_of_year, 56) + self.assertEqual(fixed_date.week_of_month, 4) def test_datetime_init_sol_month(self): fixed_date = FixedDate(date=datetime(2022, 6, 20)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 7) self.assertEqual(fixed_date.day_of_month, 3) + self.assertEqual(fixed_date.day_of_year, 171) + self.assertEqual(fixed_date.week_of_month, 1) def test_datetime_init_december_last(self): fixed_date = FixedDate(date=datetime(2022, 12, 30)) @@ -27,6 +33,8 @@ class TestBasicDatetimeInit(unittest.TestCase): self.assertEqual(fixed_date.month, 13) self.assertEqual(fixed_date.day_of_month, 28) self.assertFalse(fixed_date.is_year_day) + self.assertEqual(fixed_date.day_of_year, 364) + self.assertEqual(fixed_date.week_of_month, 4) def test_datetime_init_year_day(self): fixed_date = FixedDate(date=datetime(2022, 12, 31)) @@ -34,3 +42,5 @@ class TestBasicDatetimeInit(unittest.TestCase): self.assertEqual(fixed_date.month, 14) self.assertEqual(fixed_date.day_of_month, 1) self.assertTrue(fixed_date.is_year_day) + self.assertEqual(fixed_date.day_of_year, 365) + self.assertEqual(fixed_date.week_of_month, 1)