yumlonne / elm-japanese-calendar / JapaneseCalendar

JapaneseCalendar for Elm

Types


type alias JapaneseCalendar =
{ era : Era
, gregorianYear : Basics.Int
, japaneseYear : Basics.Int
, japaneseYearString : String 
}

JapaneseCalendar object


type alias YMDRecord =
{ year : Basics.Int
, month : Basics.Int
, day : Basics.Int 
}

Simple Date object

don't validate date


type alias Era =
{ name : String
, startedOn : YMDRecord
, endedOn : Maybe YMDRecord 
}

Japanese Era

Helpers

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 }
       ]

Converts

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 `ほげ`"]

Data set

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

toString : JapaneseCalendar -> String

fromEraWithYear "令和" 1
    |> Result.map toString
    == Ok "令和元年"