tiempo satelital que obtener mundial momento mexico italia hora fecha este españa coordinado colombia china argentina alemania actual time elm

time - satelital - ¿Cómo obtengo la hora actual en Elm?



utc mexico (8)

Elm 0.19

A continuación, establezco el tiempo inicial como tiempo de inicio de Unix Time.millisToPosix 0 , pero puede establecerlo en Nothing y, posteriormente, en Just time o pasarlo con Flag .

module Main exposing (main) import Browser import Html exposing (Html) import Task import Time exposing (Posix) main : Program () Model Msg main = Browser.element { init = /_ -> init , view = view , update = update , subscriptions = /_ -> Sub.none } -- MODEL type alias Model = { zone : Time.Zone , now : Posix } init : ( Model, Cmd Msg ) init = ( Model Time.utc (Time.millisToPosix 0), Task.perform Zone Time.here ) -- UPDATE type Msg = Zone Time.Zone | Now Posix update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of Zone zone -> ( { model | zone = zone }, Task.perform Now Time.now ) Now now -> ( { model | now = now }, Cmd.none ) -- VIEW formatTime zone posix = (String.padLeft 2 ''0'' <| String.fromInt <| Time.toHour zone posix) ++ ":" ++ (String.padLeft 2 ''0'' <| String.fromInt <| Time.toMinute zone posix) ++ ":" ++ (String.padLeft 2 ''0'' <| String.fromInt <| Time.toSecond zone posix) view : Model -> Html Msg view model = Html.div [] [ Html.text <| formatTime model.zone model.now ]

Estoy corriendo elm-repl para jugar con el lenguaje.

Me gustaría ver cuál es la hora actual. ¿Como podría hacerlo? No parece ser posible con la biblioteca actual. ¿Porqué es eso?

EDITAR: He hecho un paquete para ayudar con esto. http://package.elm-lang.org/packages/z5h/time-app

Esto se preguntó alrededor de elm 0.15 - las cosas son diferentes en elm 0.17 y 0.18 : consulte ¿Cómo obtengo la hora actual en Elm 0.17 / 0.18?


Hay dos formas principales en las que puedo pensar para trabajar con la hora actual en Elm:

  1. Escriba / use un módulo nativo para hacer una función que devuelva la hora actual en ms (o devuelva una tarea que hará lo mismo). Este método no es generalmente recomendado. Creo que # 2 es un mejor enfoque. Pero se puede encontrar un ejemplo de # 1 aquí: https://github.com/evancz/task-tutorial/blob/1.0.2/src/TaskTutorial.elm (consulte la función getCurrentTime )

  2. Escriba un programa utilizando la arquitectura de la aplicación Elm ( https://github.com/evancz/elm-architecture-tutorial/ ), y luego alimente la señal de tiempo actual como una entrada al ciclo de actualización, actualizando el modelo con la nueva hora actual en cada intervalo de su elección. Luego, todos sus otros métodos pueden obtener la hora actual de manera sincrónica fuera del modelo.


La respuesta (para 0.18) de Simon H me hizo comenzar en la dirección correcta, pero tuve algunos problemas para resolver cómo hacer algo en ese momento . ( user2167582 agrega un comentario a la respuesta de Simon, que pregunta lo mismo: ¿cómo se "quita el tiempo?").

Mi problema específico fue que quería incluir la hora actual en el cuerpo de un POST al servidor.

Finalmente lo resolví y quedé bastante satisfecho con el resultado final: el uso de Task.andThen lo Task.andThen significaba que en mi función de tiempo postTime solo puedo usar la timestamp como un parámetro ''regular'' de valor flotante (que es cuando se ejecuta la tarea , Supongo).

Mi respuesta completa está here .

A continuación se muestra la solución que se me ocurrió y aquí está en Ellie :

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 }


Para resolver mi propia pregunta, he creado una variante de StartApp que incluye una marca de tiempo en cada acción.
Así que la función de actualización tiene firma:
update : action -> Time -> model -> (model, Effects action)

La esencia está aquí. https://gist.github.com/z5h/41ca436679591b6c3e51


Puede utilizar el paquete de tiempo y / o el paquete de fecha .

Aquí hay un ejemplo artificial que usa ambos:

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


Puede ver la respuesta de pdoherty926 sobre cómo hacer algo con la hora actual en Elm.

elm-repl no tiene la capacidad de trabajar con Signal s, y la hora "cambia con el tiempo", por lo que es una señal. Tampoco hay una Task para obtener el tiempo, que yo sepa. Tampoco es una forma de ejecutar tareas en la respuesta, aunque espero que sea una característica en el futuro.


Si desea que la hora a partir del inicio del programa puede hacer lo siguiente:

Ahora.elm

module Now where import Native.Now loadTime : Float loadTime = Native.Now.loadTime

Nativo / Now.js

Elm.Native.Now = {}; Elm.Native.Now.make = function(localRuntime) { localRuntime.Native = localRuntime.Native || {}; localRuntime.Native.Now = localRuntime.Native.Now || {}; if (localRuntime.Native.Now.values) { return localRuntime.Native.Now.values; } var Result = Elm.Result.make(localRuntime); return localRuntime.Native.Now.values = { loadTime: (new window.Date).getTime() }; };

tu codigo

programStart = Now.loadTime


Actualización para 0.18 Esto se ha vuelto más simple nuevamente. Ahora todo lo que necesitas es un comando y Msg para manejar el resultado

type Msg = OnTime Time getTime : Cmd Msg getTime = Task.perform OnTime Time.now

Ver esto Ellie

Respuesta original

Con 0.17, esto es mucho más fácil. Ahora hay una tarea en la biblioteca de tiempo . Así, por ejemplo, ahora tenemos:

Time.now |> Task.Perform NoOp CurrentTime