Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/maya/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,17 @@ def second(self):
def microsecond(self):
return self.datetime().microsecond

@property
def quarter(self):
"""Returns the quarter of the year (1-4) for this datetime.

Q1: January, February, March (months 1-3)
Q2: April, May, June (months 4-6)
Q3: July, August, September (months 7-9)
Q4: October, November, December (months 10-12)
"""
return (self.datetime().month - 1) // 3 + 1

@property
def epoch(self):
return int(self._epoch)
Expand Down
71 changes: 71 additions & 0 deletions tests/test_maya.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,77 @@ def test_intervals():
assert len(list(maya.intervals(now, tomorrow, 60 * 60))) == 24


@pytest.mark.parametrize(
"date_string,expected_quarter",
[
("January 15, 2020", 1),
("February 28, 2020", 1),
("March 31, 2020", 1),
("April 10, 2020", 2),
("May 22, 2020", 2),
("June 30, 2020", 2),
("July 4, 2020", 3),
("August 15, 2020", 3),
("September 30, 2020", 3),
("October 1, 2020", 4),
("November 11, 2020", 4),
("December 25, 2020", 4),
],
)
def test_quarter(date_string, expected_quarter):
"""Test that the quarter property returns correct values for all months."""
d = maya.parse(date_string)
assert d.quarter == expected_quarter


def test_quarter_first_quarter():
"""Test quarter property for Q1 dates."""
jan = maya.parse("January 1, 2020")
assert jan.quarter == 1

feb = maya.parse("February 15, 2020")
assert feb.quarter == 1

mar = maya.parse("March 31, 2020")
assert mar.quarter == 1


def test_quarter_second_quarter():
"""Test quarter property for Q2 dates."""
apr = maya.parse("April 5, 2020")
assert apr.quarter == 2

may = maya.parse("May 20, 2020")
assert may.quarter == 2

jun = maya.parse("June 30, 2020")
assert jun.quarter == 2


def test_quarter_third_quarter():
"""Test quarter property for Q3 dates."""
jul = maya.parse("July 1, 2020")
assert jul.quarter == 3

aug = maya.parse("August 15, 2020")
assert aug.quarter == 3

sep = maya.parse("September 30, 2020")
assert sep.quarter == 3


def test_quarter_fourth_quarter():
"""Test quarter property for Q4 dates."""
oct = maya.parse("October 10, 2020")
assert oct.quarter == 4

nov = maya.parse("November 20, 2020")
assert nov.quarter == 4

dec = maya.parse("December 31, 2020")
assert dec.quarter == 4


@pytest.mark.usefixtures("frozen_now")
def test_dunder_add():
now = maya.now()
Expand Down