Phoenix默认的json日期在Chrome / Firefox中的解析方式不同

时间:2017-01-13 06:48:22

标签: elixir phoenix-framework ecto

我正在尝试以json的形式提供自动timestamp inserted_at字段。

问题在于Chrome和Firefox在解析发送内容方面存在分歧。问题似乎是,默认情况下,Phoenix提供类似"2017-01-12T19:49:000"的服务。这由Firefox和IE解析为UTC,而Chrome将此转换为本地时间。添加一个Z("2017-01-12T19:49:000Z"),所有都给当地时间。

因此我将代码转换为:

def render("message.json", %{message: message}) do
    %{id: message.id,
      content: message.content,
      date: Ecto.DateTime.to_iso8601(message.inserted_at)<>"Z"}
end

但这种感觉非常恶劣,必须有更好的方法。

1 个答案:

答案 0 :(得分:7)

问题是Ecto不知道日期时间是否是UTC。幸运的是,Ecto 2.1有一个更好的选择,因为它支持Elixir 1.3的内置日历类型。

模式中有两种新类型 - naive_datetime存储没有时区的日期时间(使用Elixir的NaiveDateTime结构),以及utc_datetime存储日期时间的UTC时区(使用Elixir的DateTime struct)。后来序列化为iso8601,最终为Z