如何获取elm中的当前日期?

时间:2016-06-19 18:42:40

标签: elm

我试图弄清楚如何在版本.17中获取elm中的当前日期。我看到他们在.17中添加了一个Date模块,但我还没有找到任何关于它如何使用的例子。有没有人想出怎么做?

编辑: 在试图改造这个解决方案时,我遇到了另一个绊脚石。我试图触发设置日期,然后调用另一个Msg来做其他事情。但是我仍然会{}获得约会。

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
    }

2 个答案:

答案 0 :(得分:4)

您需要来自Timenow任务或every订阅。

这是一个使用前者用当前时间初始化模型的示例。

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
    }

答案 1 :(得分:2)

+1来自@SorenDebois的回答。你可以重构到目前为止。要么做一个

myDate = Date.fromTime timeFromMaybe

或者在代码中使用Date。下面是完整的例子(改编自其他答案)。

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
    }