Javascript日期对象为Elixir Ecto.DateTime

时间:2017-05-18 20:40:31

标签: javascript elixir ecto

我知道JavaScript,但我对Elixir和Phoenix很新。如何从前端转换为Ecto可以转换为db的DateTime值的javascript对象?

另外,它会保留时区吗?或者我应该如何处理这些?

1 个答案:

答案 0 :(得分:2)

您可以在javascript和elixir后端之间使用iso8601日期时间字符串。

将此转换为Ecto架构的最简单方法是将字段声明为utc_datetime

然后,您可以使用Ecto.Changeset.cast自动将字符串转换为%DateTime{}结构。

defmodule Blog do
  use Ecto.Schema
  schema "blog" do
    field :publish_at, :utc_datetime
  end

  def new(params) do
    %Blog{} 
    |> Ecto.Changeset.cast(params, [:publish_at]) 
    |> Ecto.Changeset.apply_changes()
  end
end

iex> Blog.new(%{"publish_at" => "2017-01-01T12:23:34Z"})
%Blog{__meta__: #Ecto.Schema.Metadata<:built, "blog">, id: nil, publish_at: %DateTime{calendar: Calendar.ISO, day: 1, hour: 12, microsecond: {0, 0}, minute: 23, month: 1, second: 34, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}}

注意:使用此方法将丢弃任何时区偏移量。