Ecto.Datetime 获取 15 分钟前

问题描述 投票:0回答:2

Ecto.DateTime.utc
返回当前日期时间。

如何创建 15 分钟前的

Ecto.DateTime

elixir ecto
2个回答
7
投票

使用

:erlang.universaltime
获取时间(Ecto 将其用于
Ecto.DateTime.utc/0
),使用
:calendar
转换为公历秒,减去 15 * 60,转换回 Erlang 时间元组,然后转换回
Ecto.DateTime
:

iex(1)> utc = :erlang.universaltime |> :calendar.datetime_to_gregorian_seconds
63638236105
iex(2)> fifteen_minutes_ago = (utc - 15 * 60) |> :calendar.gregorian_seconds_to_datetime |> Ecto.DateTime.cast!
#Ecto.DateTime<2016-08-12 15:33:25>

编辑:管道在这里可能看起来更好:

:erlang.universaltime
|> :calendar.datetime_to_gregorian_seconds
|> Kernel.-(15 * 60)
|> :calendar.gregorian_seconds_to_datetime
|> Ecto.DateTime.cast!
|> IO.inspect

输出与之前相同。


0
投票

对于 2023 年登陆这里的人来说,Elixir 的 DateTime 模块有一个

add()
函数,它接受负数,所以你可以这样做:

DateTime.add(DateTime.utc_now(), -15, :minute)

请参阅 hexdocs 了解完整定义和选项。

© www.soinside.com 2019 - 2024. All rights reserved.