我从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用法的示例, 但是更新的时间到了,为时已晚。
答案 0 :(得分:0)
我分两部分解决了这个问题:
使用标志将当前时间发送给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
。
第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
。