How do I get the current time in Elm?
Update for 0.19 It is not possible to get the current time using the standard library.. You need to use elm/time
. As with 0.18, all you need is a command and Msg to handle the result
type Msg
= OnTime Time.Posix
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
Update for 0.18 This has got simpler again. Now all you need is a command and Msg to handle the result
type Msg
= OnTime Time
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
See this Ellie
Original answer
With 0.17, this got a whole lot easier. There is now a Task in the Time library. So for example, we now have:
Time.now
|> Task.Perform NoOp CurrentTime
You can use the Time package and/or the Date package.
Here's a contrived example which uses both:
import Signal
import Time exposing (every, second)
import Date exposing (year, hour, minute, second, fromTime)
import Graphics.Element exposing (show)
main =
Signal.map currentTime (Time.every Time.second)
currentTime t =
let date' = fromTime t
hour' = toString (Date.hour date')
minute' = toString (Date.minute date')
second' = toString (Date.second date')
year' = toString (year date')
now = "The current time is: " ++ hour' ++ ":" ++ minute' ++ ":" ++ second'
in
show now
To resolve my own question, I've created a variant of StartApp that includes a timestamp on each action.
So the update function has signature:update : action -> Time -> model -> (model, Effects action)
The Gist is here. https://gist.github.com/z5h/41ca436679591b6c3e51