dzuk-mutant / internet-time-elm / InternetTime

A module for using Internet Time.

Daily time

These functions convert a Posix Time to a displayable Internet Time) for that particular day.

(This also includes moving from the Posix timezone (UTC) to Internet Time's timezone (UTC+1).)

Traditionally, Internet Time is displayed with a

fromPosix : Time.Posix -> Basics.Float

Converts a Time.Posix to Internet Time for that particular day as a raw Float.

oneTime = Time.millisToPosix 1525244393059
anotherTime = Time.millisToPosix 1525221281000

InternetTime.fromPosix oneTime -- 333
InternetTime.fromPosix anotherTime -- 65

displayFromPosix : Time.Posix -> String

Converts a Time.Posix to Internet Time for that particular day. The output is a String with padded 0s if necessary so it displays as a traditionally correct 3 digit number.

oneTime = Time.millisToPosix 1525244393059
anotherTime = Time.millisToPosix 1525221281000

InternetTime.displayFromPosix oneTime -- "333"
InternetTime.displayFromPosix anotherTime -- "065"

Lenghts of time

Use the cadence of Internet Time in your application.

beat : Basics.Int

One Internet Time beat in milliseconds.

This is the largest possible measurement of time in Internet Time.

centibeat : Basics.Int

One Internet Time centibeat in milliseconds.

Centibeats are quite rarely used in Internet Time, but it would be quite useful if you want to update your time subscription in something that matches the timing of beats exactly, but with something much more precise.

subscriptions : Model -> Sub Msg
subscriptions model =
    Time.every (25 * centibeat) Tick

millisToBeats : Basics.Int -> Basics.Float

Convert an Int representing milliseconds to raw beats (1/1,000th of a day).

millisToBeats 1380000 -- 23min = 15.972222 beats

Custom daily time

Just in case you need something with extra detail like counting time with centibeats as well.

In regular cases, fromPosix and displayFromPosix should probably cover all of your needs.

fromPosixCustom : Basics.Int -> Time.Posix -> Basics.Float

Converts a Time.Posix to the Internet Time for that particular day as a Float.

The first argument is for how much detail (extra decimal points) you want - beats (0) are the largest form of measurement possible.

oneTime = Time.millisToPosix 1525244393059
anotherTime = Time.millisToPosix 1525221281000

fromPosixCustom 0 oneTime -- 333
fromPosixCustom 2 oneTime -- 333.25 (extra detail w/ centibeats)
fromPosixCustom 0 anotherTime -- 65
fromPosixCustom 2 anotherTime -- 65.75 (extra detail w/ centibeats)

displayFromPosixCustom : Basics.Int -> Time.Posix -> String

Converts a Time.Posix to a Internet Time for that particular day in the form of a display-ready String.

The first argument is for how much detail (extra digits) you want - beats are the largest form of measurement possible.

oneTime = Time.millisToPosix 1525244393059
anotherTime = Time.millisToPosix 1525294572000

displayFromPosixCustom 0 oneTime -- "333"
displayFromPosixCustom 2 oneTime -- "333.25" (extra detail w/ centibeats)
displayFromPosixCustom 0 anotherTime -- "914"
displayFromPosixCustom 2 anotherTime -- "914.37" (extra detail w/ centibeats)

This time is padded with zeroes so you get the traditionally correct 3-digit display for beats.

thirdTime = Time.millisToPosix 1525221281000

displayFromPosixCustom 0 thirdTime -- "065"
displayFromPosixCustom 2 thirdTime -- "065.75" (extra detail w/ centibeats)