How do I get the current time in Elm?

后端 未结 8 1302
庸人自扰
庸人自扰 2020-12-03 01:15

I\'m running elm-repl to play around with the language.

I\'d like to see what the current time is. How would I do that? It doesn\'t appear to be possible with the c

相关标签:
8条回答
  • 2020-12-03 01:57

    You can see pdoherty926's answer for how to do something with the current time in Elm.

    elm-repl doesn't have the ability to work with Signals, and time "changes over time" so it's a signal. There also isn't a Task for getting the time, that I know of. Nor a way to execute tasks in the repl, though I expect that will be feature in the future.

    0 讨论(0)
  • 2020-12-03 01:58

    Update for 0.19 It is not possible to get the current time using the standard library.. You need to use elm/time. As with 0.18, all you need is a command and Msg to handle the result

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

    Update for 0.18 This has got simpler again. Now all you need is a command and Msg to handle the result

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

    See this Ellie

    Original answer

    With 0.17, this got a whole lot easier. There is now a Task in the Time library. So for example, we now have:

    Time.now
    |> Task.Perform NoOp CurrentTime
    
    0 讨论(0)
  • 2020-12-03 02:02

    You can use the Time package and/or the Date package.

    Here's a contrived example which uses both:

    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
    
    0 讨论(0)
  • 2020-12-03 02:04

    If you want the time as of program start you can do the following:

    Now.elm

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

    Native/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()
      };
    
    };
    

    your code

    programStart = Now.loadTime
    
    0 讨论(0)
  • 2020-12-03 02:07

    There are two main ways I can think of to work with the current time in Elm:

    1. Write / use a native module to make a function that returns the current time in ms (or returns a task that will do the same). This method isn't generally recommended. I think #2 is a better approach. But an example of #1 can be found here: https://github.com/evancz/task-tutorial/blob/1.0.2/src/TaskTutorial.elm (see the getCurrentTime function)

    2. Write a program using the Elm application architecture (https://github.com/evancz/elm-architecture-tutorial/), and then feed the current time signal as an input to the update cycle, updating the model with the new current time at every interval of your choosing. Then all of your other methods can just fetch the current time synchronously off of the model.

    0 讨论(0)
  • 2020-12-03 02:15

    To resolve my own question, I've created a variant of StartApp that includes a timestamp on each action.
    So the update function has signature:
    update : action -> Time -> model -> (model, Effects action)

    The Gist is here. https://gist.github.com/z5h/41ca436679591b6c3e51

    0 讨论(0)
提交回复
热议问题