Я решил это в двух частях:
Часть 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
в соответствии с вашими потребностями.