JapaneseCalendar for Elm
{ era : Era
, gregorianYear : Basics.Int
, japaneseYear : Basics.Int
, japaneseYearString : String
}
JapaneseCalendar object
{ year : Basics.Int
, month : Basics.Int
, day : Basics.Int
}
Simple Date object
don't validate date
{ name : String
, startedOn : YMDRecord
, endedOn : Maybe YMDRecord
}
Japanese Era
ymd : Basics.Int -> Basics.Int -> Basics.Int -> YMDRecord
Simple alias for YMDRecord.
ymd 2000 10 20 == { year = 2000, month = 10, day = 20 }
lastJapaneseYear : Basics.Int -> Era -> Basics.Int
Get last Japanese year.
Needs currentYear for calculate current-era's last Japanese year.
calendar
|> List.map (\era -> { era = era.name, lastYear = lastJapaneseYear 2019 era })
== [ { era = "令和", lastYear = 1 }
, { era = "平成", lastYear = 31 }
, { era = "昭和", lastYear = 64 }
, { era = "大正", lastYear = 15 }
, { era = "明治", lastYear = 45 }
]
fromYMD : YMDRecord -> Result (List String) JapaneseCalendar
Convert YMDRecord to JapaneseCalendar.
Returns errors or JapaneseCalendar.
fromYMD (ymd 2019 4 20) == Ok { era = { name = "平成", ... }, ... }
fromYMD (ymd 1700 1 10) == Err ["Too past year! `1700` < 1868"]
fromEraWithYear : String -> Basics.Int -> Result (List String) JapaneseCalendar
Convert Era and JapaneseYear to JapaneseCalendar
Returns Errors or JapaneseCalendar.
fromEraWithYear "令和" 1 == Ok { era = { name = "令和", ... }, ... }
fromEraWithYear "ほげ" 1 == Err ["unknown era `ほげ`"]
calendar : List Era
The list of recent eras
calendar =
[ { name = "令和", startedOn = ymd 2019 5 1, endedOn = Nothing }
, { name = "平成", startedOn = ymd 1989 1 8, endedOn = Just <| ymd 2019 4 30 }
, { name = "昭和", startedOn = ymd 1926 12 25, endedOn = Just <| ymd 1989 1 7 }
, { name = "大正", startedOn = ymd 1912 7 30, endedOn = Just <| ymd 1926 12 24 }
, { name = "明治", startedOn = ymd 1868 1 1, endedOn = Just <| ymd 1912 7 29 }
-- more?
]
toString : JapaneseCalendar -> String
fromEraWithYear "令和" 1
|> Result.map toString
== Ok "令和元年"