Skip to content

Commit 0b4273f

Browse files
committed
Add day_of_year/3, quarter_of_year/3
1 parent d88600e commit 0b4273f

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

lib/cldr/calendar/calendars/julian.ex

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ defmodule Cldr.Calendar.Julian do
1818
@new_year_starting_month start_month
1919
@new_year_starting_day start_day
2020

21+
@quarters_in_year 4
2122
@months_in_year Cldr.Calendar.Julian.months_in_year(0)
2223
@last_month_of_year rem(start_month + (@months_in_year - 1), @months_in_year)
2324

@@ -99,9 +100,29 @@ defmodule Cldr.Calendar.Julian do
99100
Date.range(first, last, 1)
100101
end
101102

102-
# Returns the ordinal month
103-
def month_of_year(_year, ordinal_month, _day) do
104-
Cldr.Math.amod(ordinal_month - @new_year_starting_month + 1, @months_in_year)
103+
def quarter_of_year(year, month, day) do
104+
month_of_year = month_of_year(year, month, day)
105+
106+
ceil(month_of_year / (@months_in_year / @quarters_in_year))
107+
end
108+
109+
# Returns the ordinal month accounting for a long month 12
110+
def month_of_year(_year, month, day)
111+
when month == @new_year_starting_month and day < @new_year_starting_day do
112+
@months_in_year
113+
end
114+
115+
def month_of_year(_year, month, _day) do
116+
Cldr.Math.amod(month - @new_year_starting_month + 1, @months_in_year)
117+
end
118+
119+
def day_of_year(year, month, day) do
120+
adjusted_year =
121+
if month < @new_year_starting_month, do: year + 1, else: year
122+
123+
first_day = date_to_iso_days(year, @new_year_starting_month, @new_year_starting_day)
124+
this_day = date_to_iso_days(adjusted_year, month, day)
125+
this_day - first_day + 1
105126
end
106127

107128
defdelegate valid_date?(year, month, day), to: Cldr.Calendar.Julian
@@ -110,11 +131,9 @@ defmodule Cldr.Calendar.Julian do
110131
defdelegate week(year, week), to: Cldr.Calendar.Julian
111132
defdelegate weeks_in_year(year), to: Cldr.Calendar.Julian
112133
defdelegate day_of_week(year, month, day, starts_on), to: Cldr.Calendar.Julian
113-
defdelegate day_of_year(year, month, day), to: Cldr.Calendar.Julian
114134
defdelegate day_of_era(year, month, day), to: Cldr.Calendar.Julian
115135
defdelegate iso_week_of_year(year, month, day), to: Cldr.Calendar.Julian
116136
defdelegate week_of_year(year, month, day), to: Cldr.Calendar.Julian
117-
defdelegate quarter_of_year(year, month, day), to: Cldr.Calendar.Julian
118137
defdelegate year_of_era(year), to: Cldr.Calendar.Julian
119138
defdelegate parse_date(date), to: Cldr.Calendar.Julian
120139
defdelegate date_to_string(year, month, day), to: Cldr.Calendar.Julian

0 commit comments

Comments
 (0)