I'm trying to figure out how to get the current date in elm in version .17. I see that they added a Date module to .17 but I haven't found any examples on how it's used. Has anyone figured out how to do this?
Edit: In trying to retrofit this solution, I hit another stumbling block. I'm trying to trigger setting the date and then calling another Msg to do something else. But I'm still getting {} for a date.
import Html.App as App
import Html exposing (..)
import Time exposing (Time)
import Task
import Date exposing (Date)
import Html.Events exposing (onClick)
import Html.Attributes exposing (..)
type alias Model =
{currentDate : Maybe Date}
type Msg =
SetDate (Maybe Date)
| TriggerDateSet
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
SetDate date ->
({model | currentDate = date}, Cmd.none)
TriggerDateSet ->
(model, now)
view : Model -> Html Msg
view model =
div []
[ div []
[ button [onClick TriggerDateSet] [] ]
, div [] [ text <| "(Optional) time at program launch was " ++ toString model ]
]
now : Cmd Msg
now =
Task.perform (always (SetDate Nothing)) (Just >> SetDate) Date.now
main : Program Never
main =
App.program
{ init = ( Model Nothing, now )
, view = view
, subscriptions = always Sub.none
, update = update
}
You'll want the now
Task or the every
Subscription from Time.
Here's an example using the former to initialise the model with the current time.
import Html.App as App
import Html exposing (..)
import Time exposing (Time)
import Task
type alias Model =
Maybe Time
type Msg =
SetTime (Maybe Time)
update : Msg -> Model -> (Model, Cmd Msg)
update (SetTime time) _ =
(time, Cmd.none)
view : Model -> Html Msg
view model =
div [] [ text <| "(Optional) time at program launch was " ++ toString model ]
now : Cmd Msg
now =
Task.perform (Just >> SetTime) Time.now
main : Program Never
main =
App.program
{ init = ( Nothing, now )
, view = view
, subscriptions = always Sub.none
, update = update
}