使用当前日期初始化模型

Initialize model with current date

我正在尝试使用当前日期初始化我的模型。我不想使用本机模块。我正在尝试使用任务和效果来做到这一点。我被困在我的 getCurrentTime 方法中。什么是最干净的方法?

import Time exposing ( Time )
import StartApp
import Task
import Effects exposing (Never)
import Html exposing ( Html )

app = 
  StartApp.start
    { init = init
    , view = view
    , update = update
    , inputs = []}

main = 
  app.html

port tasks : Signal (Task.Task Never ())
port tasks =
  app.tasks

type alias Model = 
    { clock : Time}

init : (Model, Effects.Effects Action)
init = ((Model  ), Effects.none)

type Action = ShowClock 

update : Action -> Model -> (Model, Effects.Effects Action)
update action model = 
  case action of
    ShowClock c -> 
      ({ model | clock = c}, Effects.none)

getCurrentTime : Effects.Effects Action
getCurrentTime =
  -- stuck here
  |> Task.map ShowClock
  |> Effects.task

view : Signal.Address Action -> Model -> Html
view address model =
  Signal.map Html.text model.clock

最好将时间转换成 "YYYY-MM-DD" 格式的字符串。

如果我们只是想在程序开始时传递一个初始值,我们可以使用一个端口:

因此,我们将其添加到包含 main:

的应用程序中
port time : Float

...然后我们必须将以下内容添加到我们的 html 中,以便为我们的 elm 程序提供正确的初始值。

var myapp = Elm.fullscreen(Elm.YourAppNameHere, 
                           {
                               time: Date.now()
                           });

elm 语言网站上的互操作文档合理地涵盖了这一点,并提供了指向其他几个示例的链接:http://elm-lang.org/guide/interop

或者,您可以尝试 Signal.Extra 库中的 foldp',它会更明确地公开初始值。 http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/5.7.0

http://package.elm-lang.org/packages/evancz/task-tutorial/1.0.3/TaskTutorial 提供了一个 ELM 包,您可以使用它来获取当前时间。

首先,您需要下载它并在终端或 Windows 命令中使用以下命令更新您的 elm-package.json 文件:

elm-package install evancz/task-tutorial 1.0.3

然后更新您的代码:

getCurrentTime : Effects.Effects Action
getCurrentTime = Effects.task <| Task.map ShowClock ( TaskTutorial.getCurrentTime )

最后,您只需调用 getCurrentTime 作为效果操作,您的模型就会更新。

要将您的时间转换为人类可读的日期字符串,您可以使用这个小辅助函数:

 toHRDate : Time -> String -- to human readable date
 toHRDate t =
     let
       date = Date.fromTime t
       d = toString (Date.day date) -- day
       m = toString (Date.month date) -- month
       y = toString (Date.year date) -- year
       hrd = d ++ "-" ++ m ++ "-" ++ y
    in hrd