问题
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
}
回答1:
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
}
回答2:
+1 for answer from @SorenDebois. You can refactor to date. Either by doing a
myDate = Date.fromTime timeFromMaybe
Or by using Date everywhere in the code. Below is the complete example (adapted from the other answer).
import Html.App as App
import Html exposing (..)
import Date exposing (Date)
import Task
type alias Model =
Maybe Date
type Msg =
SetDate (Maybe Date)
update : Msg -> Model -> (Model, Cmd Msg)
update (SetDate date) _ =
(date, Cmd.none)
view : Model -> Html Msg
view model =
div [] [ text <| "(Optional) date at program launch was " ++ dateString model ]
dateString : Model -> String
dateString model =
case model of
Nothing -> "No date here"
Just date ->
"the date is "
++ (toString <| Date.dayOfWeek date)
++ " "
++ (toString <| Date.day date)
++ " "
++ (toString <| Date.month date)
++ " "
++ (toString <| Date.year date)
now : Cmd Msg
now =
Task.perform (Just >> SetDate) Date.now
main : Program Never
main =
App.program
{ init = ( Nothing, now )
, view = view
, subscriptions = always Sub.none
, update = update
}
来源:https://stackoverflow.com/questions/37910613/how-do-i-get-the-current-date-in-elm