在初始化ELM中设置当前时间0.19

时间:2019-01-10 15:16:45

标签: time elm

我从JS获取输入JSON数据。这是一个简单的对象,其中有一个日期格式为“ DD.MM.YYYY”的日期-只是一个字符串。

如果对象中没有dateStart,则必须将其替换为当前日期(在withDefault中)。

paramsDecoder : Decode.Decoder Params
paramsDecoer =
    Decode.succeed Params
        |> Decode.andMap (Decode.field "dateStart" (Decode.string) |> (Decode.withDefault) "")
        |> Decode.andMap (Decode.field "dateEnd" (Decode.string)   |> (Decode.withDefault) "")
        |> Decode.andMap (Decode.field "country" (Decode.string)   |> (Decode.withDefault) "spain")

如何在ELM中做到这一点? 时区并不重要,并且始终等于相同的区域。

我找到了一个Time.now Time.zone用法的示例, 但是更新的时间到了,为时已晚。

1 个答案:

答案 0 :(得分:0)

我分两部分解决了这个问题:

第1部分

使用标志将当前时间发送给Elm初始化:

Elm.Main.init({flags: Date.now()});

并将其放入您的模型中

import Time exposing (Posix, millisToPosix)

type alias Model = { now : Time.Posix, ... }

init : Int -> (Model, Cmd Msg)
init time = (Model (millisToPosix time), Cmd.none)

对于您的用例,您可以使用withDefault model.now

第2部分

第1部分中的解决方案仅将now设置为页面加载时间。

如果要保持最新时间,可以使用Time.every更新模型:

import Time exposing (Posix, millisToPosix, every)

timeOutCheck : Sub Msg
timeOutCheck = Time.every 250 UpdateTimeNow

type Msg = UpdateTimeNow Posix | ...

update msg model = case msg of
  UpdateTimeNow time = { model | now = time }
  ...

这将确保now永远不会比当前时间晚250毫秒。您可以根据自己的需要更改250