2015-08-31 9 views
18

Ich habe eine Instanz von , die ich von einer Datenbankspalte bekomme, und ich muss überprüfen, ob dieses Datum mehr als 5 Minuten in der Vergangenheit ist.Wie man Daten mit Elixir und Ecto vergleicht

Was ist der beste Weg, das zu tun?

Um es deutlich zu machen, ist das, was ich in Ruby brauchen ->

updated_at < (Time.now - 5.minutes) 

Antwort

19

Sie können es datetime_add/3 mit einem negativen Wert als count Argument tun:

from u in User, 
    where: u.reset_password_sent_at > datetime_add(^Ecto.DateTime.utc, -5, "minute") 

Wenn Sie müssen Sie es tun, ohne eine Abfrage zu verwenden, können Sie die Funktionen im :calendar erlang Modul:

ecto_5_mins_ago = 
    Ecto.DateTime.utc 
    |> Ecto.DateTime.to_erl 
    |> :calendar.datetime_to_gregorian_seconds 
    |> Kernel.-(60 * 5) 
    |> :calendar.gregorian_seconds_to_datetime 
    |> Ecto.DateTime.from_erl 

Ecto.DateTime.compare(u.reset_password_token, ecto_5_mins_ago) 
+3

Ich bin überrascht, es gibt nicht einige praktische eingebaute Funktion für diese Art von Dingen, aber danke trotzdem – JustMichael

+7

Sie möchten vielleicht einen Blick auf https://github.com/bitwalker/timex dann :) – MartinElvar

+1

Nicht jeder berücksichtigt die gleiche Dinge "bequem" –

Verwandte Themen