professortX/date-format/1.0.0

DateFormat.Relative

A reliable way to get a pretty message for the relative time difference between two dates.

Getting relative time for two dates

relativeTime : Posix -> Posix -> String

This function takes in two times and returns the relative difference!

Here are a few examples to help:

relativeTime now tenSecondsAgo == "just now"


relativeTime now tenSecondsFromNow == "in a few seconds"


relativeTime now fortyThreeMinutesAgo == "43 minutes ago"


relativeTime now oneHundredDaysAgo == "100 days ago"


relativeTime now oneHundredDaysFromNow == "in 100 days"




-- Order matters!
relativeTime now tenSecondsAgo == "just now"


relativeTime tenSecondsAgo now == "in a few seconds"
relativeTimeWithOptions : RelativeTimeOptions -> Posix -> Posix -> String

Maybe relativeTime is too lame. (Or maybe you speak a different language than English!)

With relativeTimeWithOptions, you can provide your own custom messages for each time range.

(That's what relativeTime uses under the hood!)

You can provide a set of your own custom options, and use relativeTimeWithOptions instead.

type alias RelativeTimeOptions =
{ someSecondsAgo : Int -> String
, someMinutesAgo : Int -> String
, someHoursAgo : Int -> String
, someDaysAgo : Int -> String
, someMonthsAgo : Int -> String
, someYearsAgo : Int -> String
, rightNow : String
, inSomeSeconds : Int -> String
, inSomeMinutes : Int -> String
, inSomeHours : Int -> String
, inSomeDays : Int -> String
, inSomeMonths : Int -> String
, inSomeYears : Int -> String
}

Options for configuring your own relative message formats!

For example, here is how someSecondsAgo is implemented by default:

defaultSomeSecondsAgo : Int -> String
defaultSomeSecondsAgo seconds =
    if seconds < 30 then
        "just now"


    else
        toString seconds ++ " seconds ago"

And here is how inSomeHours might look:

defaultInSomeHours : Int -> String
defaultInSomeHours hours =
    if hours < 2 then
        "in an hour"


    else
        "in " ++ toString hours ++ " hours"
defaultRelativeOptions : RelativeTimeOptions

If there is something you'd like to tweak based off of the defaults, this record might be a good starting point!