diff --git a/lib/elixir/lib/calendar/date.ex b/lib/elixir/lib/calendar/date.ex index 54481502391..c3184cf9906 100644 --- a/lib/elixir/lib/calendar/date.ex +++ b/lib/elixir/lib/calendar/date.ex @@ -508,7 +508,7 @@ defmodule Date do @doc since: "1.11.0" @spec from_gregorian_days(integer(), Calendar.calendar()) :: t def from_gregorian_days(days, calendar \\ Calendar.ISO) when is_integer(days) do - from_iso_days({days, 0}, calendar) + from_iso_days({days, {0, 86_400}}, calendar) end @doc """ diff --git a/lib/elixir/test/elixir/calendar/date_test.exs b/lib/elixir/test/elixir/calendar/date_test.exs index 81a233133f5..6f2fcc8ce01 100644 --- a/lib/elixir/test/elixir/calendar/date_test.exs +++ b/lib/elixir/test/elixir/calendar/date_test.exs @@ -204,6 +204,19 @@ defmodule DateTest do fn -> Date.convert!(~D[2016-02-03], FakeCalendar) end end + test "from_gregorian_days/2" do + assert Date.from_gregorian_days(730_485, Calendar.Holocene) == + Calendar.Holocene.date(12000, 01, 01) + + assert Date.from_gregorian_days(-1, Calendar.Holocene) == + Calendar.Holocene.date(9999, 12, 31) + + for days <- [-1_000_000, 0, 1, 1_000_000] do + date = Date.from_gregorian_days(days, Calendar.Holocene) + assert Date.to_gregorian_days(date) == days + end + end + test "add/2" do assert Date.add(~D[0000-01-01], 3_652_424) == ~D[9999-12-31] assert Date.add(~D[0000-01-01], 3_652_425) == Date.new!(10000, 1, 1)