【问题标题】:How do I get the current date in elm?如何在 elm 中获取当前日期?
【发布时间】:2016-06-19 18:42:40
【问题描述】:

我正在尝试弄清楚如何在版本 .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
    }

【问题讨论】:

    标签: elm


    【解决方案1】:

    您需要now 任务或Timeevery 订阅。

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

    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
        }
    

    【讨论】:

    • 我试图获取当前日期。使用您的示例,我将所有对时间的引用替换为日期并返回 {}。我认为移植到 js 来获取它可能更容易。
    【解决方案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
        }
    

    【讨论】:

    • 我能够将您的答案与上面的答案结合起来并开始工作!谢谢!
    • Task.perform 已更改,现在正确的语法是:Task.perform (Just &gt;&gt; SetDate) Date.now
    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2012-01-29
    • 2010-11-07
    • 2010-12-04
    • 2013-03-27
    相关资源
    最近更新 更多