Time 如何获取Elm的当前时间?
我正在运行elm repl来处理这种语言 我想看看现在是什么时间。我该怎么做?对于当前库,这似乎不可能。为什么呢Time 如何获取Elm的当前时间?,time,elm,Time,Elm,我正在运行elm repl来处理这种语言 我想看看现在是什么时间。我该怎么做?对于当前库,这似乎不可能。为什么呢 编辑:我制作了一个软件包来帮助这项工作 这是关于elm 0.15-的问题,elm 0.17和0.18中的情况有所不同:请参见您可以使用和/或 下面是一个人为的示例,它同时使用了以下两种方法: import Signal import Time exposing (every, second) import Date exposing (year, hour, minute, sec
编辑:我制作了一个软件包来帮助这项工作 这是关于elm 0.15-的问题,elm 0.17和0.18中的情况有所不同:请参见您可以使用和/或 下面是一个人为的示例,它同时使用了以下两种方法:
import Signal
import Time exposing (every, second)
import Date exposing (year, hour, minute, second, fromTime)
import Graphics.Element exposing (show)
main =
Signal.map currentTime (Time.every Time.second)
currentTime t =
let date' = fromTime t
hour' = toString (Date.hour date')
minute' = toString (Date.minute date')
second' = toString (Date.second date')
year' = toString (year date')
now = "The current time is: " ++ hour' ++ ":" ++ minute' ++ ":" ++ second'
in
show now
您可以在Elm中查看如何使用当前时间执行某些操作
elm repl
无法处理信号
s,时间“随时间变化”,因此它是一个信号。
据我所知,这里也没有一个
任务
来获取时间。也不是在repl中执行任务的方法,尽管我希望这将是将来的特性 如果您需要程序启动的时间,可以执行以下操作:
现在,埃尔姆
Native/Now.js
你的代码
为了解决我自己的问题,我创建了StartApp的一个变体,它在每个操作上都包含一个时间戳。
因此更新函数具有签名:
更新:动作->时间->模型->(模型,效果动作)
要点在这里。
在Elm中,我可以想到两种处理当前时间的主要方法:
getCurrentTime
函数)更新0.19无法使用标准库获取当前时间。。您需要使用
elm/time
。与0.18一样,您只需要一个命令和消息来处理结果
type Msg
= OnTime Time.Posix
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
type Msg
= OnTime Time
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
更新为0.18这又变得简单了。现在,您只需要一个命令和消息来处理结果
type Msg
= OnTime Time.Posix
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
type Msg
= OnTime Time
getTime : Cmd Msg
getTime =
Task.perform OnTime Time.now
看到这个了吗
原始答案
如果是0.17,这就容易多了。现在在中有一个任务。例如,我们现在有:
Time.now
|> Task.Perform NoOp CurrentTime
Simon H给出的答案(0.18)让我朝着正确的方向开始了,但我确实遇到了一些困难,无法确定如何在这段时间内真正做一些事情。(user2167582
在Simon的回答中添加了一条注释,该注释提出了同样的问题:如何“获得超时时间?”)
我的具体问题是,我想在发送到服务器的帖子正文中包含当前时间
我最终解决了这个问题,并对最终结果非常满意——使用了任务。然后意味着我在postTime
函数中可以使用timestamp
作为“常规”浮点值参数(我想在任务运行时就是这样)
我的完整答案是
以下是我提出的解决方案:
模块主显示(…)
导入Html公开(…)
导入Html.Events公开(..)
导入Http
导入Json。解码为JD
导入Json.Encode为JE
导入任务
导入时间
类型别名模型=
{url:String
}
输入味精
=PostTimeToServer
|PostDone(结果Http.Error字符串)
更新:Msg->Model->(Model,Cmd-Msg)
更新msg模型=
味精案例
PostTimeToServer->
(模型,postTimeToServer model.url)
PostDone->
(型号,Cmd.none)
查看:模型->Html消息
视图模型=
分区[]
[部门[]
[按钮[单击PostTimeToServer][Html.text“发布当前时间”。]
]
]
postTimeToServer:String->Cmd Msg
postTimeToServer url=
让
盖蒂姆=
时间到了
加时t=
JD.string
|>Http.post url(JE.float t |>Http.jsonBody)
|>Http.toTask
请求=
getTimeElm 0.19
- 时间
- 模拟svg时钟
下面我将初始时间设置为unix时间开始time.millisToPosix 0
,但您可以将其设置为无
,稍后设置为仅时间
,或者使用标志传递它
模块主显示(主)
导入浏览器
导入Html(Html)
导入任务
导入时间曝光(Posix)
main:Program()模型Msg
主要=
浏览器.element
{init=\\->init
,视图=视图
,update=update
,订阅=\ \->Sub.none
}
--模型
类型别名模型=
{zone:Time.zone
,现在:Posix
}
初始化:(模型,Cmd Msg)
初始化=
(Model Time.utc(Time.millisToPosix 0),Task.perform Zone Time.here)
--更新
输入味精
=区域时间。区域
|现在是Posix
更新:Msg->Model->(Model,Cmd-Msg)
更新msg模型=
味精案例
区域->
({model | zone=zone},Task.perform Now Time.Now)
现在->
({model | now=now},Cmd.none)
--看法
格式化时区posix=
(String.padLeft 2'0'很遗憾,这并没有回答我自己的问题,这只是“如何获取elm中的当前时间”。这是在回答“如何在时间频率的基础上执行任务,并将时间传递到任务中”。这种方法能否适应于解决以下问题:“调用函数并返回当前系统时间“?@TomKludy我认为您的请求是不可能的,因为该函数必然是不纯净的。根据@Apanatshka的观点,您可以使用任务
并传递回调,该回调将接收系统调用后的时间,或者使用任务
和邮箱
Time.now
|> Task.Perform NoOp CurrentTime
module Main exposing (..)
import Html exposing (..)
import Html.Events exposing (..)
import Http
import Json.Decode as JD
import Json.Encode as JE
import Task
import Time
type alias Model =
{ url : String
}
type Msg
= PostTimeToServer
| PostDone (Result Http.Error String)
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
PostTimeToServer ->
( model, postTimeToServer model.url )
PostDone _ ->
( model, Cmd.none )
view : Model -> Html Msg
view model =
div []
[ div []
[ button [ onClick PostTimeToServer ] [ Html.text "POST the current time." ]
]
]
postTimeToServer : String -> Cmd Msg
postTimeToServer url =
let
getTime =
Time.now
postTime t =
JD.string
|> Http.post url (JE.float t |> Http.jsonBody)
|> Http.toTask
request =
getTime <<-- Here is
|> Task.andThen postTime <<-- the key bit.
in
Task.attempt PostDone request
main =
Html.program
{ init = ( Model "url_here", Cmd.none )
, update = update
, view = view
, subscriptions = always Sub.none
}