Elm:
Obtendo a data atual

Como fazer:

Elm torna um pouco mais envolvente pegar a data, já que funciona com imutabilidade e efeitos gerenciados. Primeiro, vamos pedir a data e depois reagir quando a conseguirmos.

import Browser
import Html exposing (..)
import Task
import Time exposing (Posix)

type Msg = GotTime Posix

main =
    Browser.element
    { init = init
    , view = view
    , update = update
    , subscriptions = subscriptions
    }

init : () -> ( Model, Cmd Msg )
init _ =
    ( Model Nothing, Task.perform GotTime Time.now )

type alias Model =
    { currentTime : Maybe Posix }

view : Model -> Html Msg
view model =
    div []
        [ text (case model.currentTime of
                  Just time -> String.fromInt (Time.posixToMillis time)
                  Nothing -> "Carregando..."
              )
        ]

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        GotTime time ->
            ( { model | currentTime = Just time }, Cmd.none )

subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.none

Saída de exemplo (formato timestamp Unix): “1619372789534”.

Aprofundamento

Elm preza pelo controle de efeitos colaterais, por isso, obter a data atual é um efeito e deve ser tratado como uma tarefa. Historicamente, Elm sempre buscou ter um modelo simples e previsível de programação, diferentemente de JavaScript que pode ser mais direto mas imprevisível em comportamento. Alternativas incluem usar flags ou portas para passar a hora do servidor para Elm, mas Time.now é a maneira canônica standard.

Veja também