How do I get the current date in elm?

懵懂的女人 提交于 2019-12-24 06:44:15

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!