在 Elixir 中,如何设置相对于现在的 DateTime 格式?
In Elixir, how do I format a DateTime relative to now?
我记得找到了一个可以让您将 DateTime 转换为字符串的工具,例如“in 1 hour”,但到目前为止我的搜索是空的。
您可能对Timex
感兴趣
ex_cldr_dates_times也有能力,包括本地化。
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z])
{:ok, "in 1 hour"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z], locale: "de")
{:ok, "in 1 Stunde"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z], locale: "ja")
{:ok, "1 時間後"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 11:05:00Z])
{:ok, "2 hours ago"}
如果您想更多地自定义字符串,构建您自己的字符串也很容易。例如。使用“3h”而不是“3 小时”等的短版本:
def from_now_short(now \ DateTime.utc_now(), later) do
diff = DateTime.diff(now, later)
cond do
diff <= -24 * 3600 -> "in #{div(-diff, 24 * 3600)}d"
diff <= -3600 -> "in #{div(-diff, 3600)}h"
diff <= -60 -> "in #{div(-diff, 60)}m"
diff <= -5 -> "in #{-diff}s"
diff <= 5 -> "now"
diff <= 60 -> "#{diff}s ago"
diff <= 3600 -> "#{div(diff, 60)} minutes ago"
diff <= 24 * 3600 -> "#{div(diff, 3600)}m ago"
true -> "#{div(diff, 24 * 3600)}d ago"
end
end
我记得找到了一个可以让您将 DateTime 转换为字符串的工具,例如“in 1 hour”,但到目前为止我的搜索是空的。
您可能对Timex
ex_cldr_dates_times也有能力,包括本地化。
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z])
{:ok, "in 1 hour"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z], locale: "de")
{:ok, "in 1 Stunde"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 08:00:00Z], locale: "ja")
{:ok, "1 時間後"}
iex> Cldr.DateTime.Relative.to_string(~U[2017-04-29 09:00:00Z], relative_to: ~U[2017-04-29 11:05:00Z])
{:ok, "2 hours ago"}
如果您想更多地自定义字符串,构建您自己的字符串也很容易。例如。使用“3h”而不是“3 小时”等的短版本:
def from_now_short(now \ DateTime.utc_now(), later) do
diff = DateTime.diff(now, later)
cond do
diff <= -24 * 3600 -> "in #{div(-diff, 24 * 3600)}d"
diff <= -3600 -> "in #{div(-diff, 3600)}h"
diff <= -60 -> "in #{div(-diff, 60)}m"
diff <= -5 -> "in #{-diff}s"
diff <= 5 -> "now"
diff <= 60 -> "#{diff}s ago"
diff <= 3600 -> "#{div(diff, 60)} minutes ago"
diff <= 24 * 3600 -> "#{div(diff, 3600)}m ago"
true -> "#{div(diff, 24 * 3600)}d ago"
end
end