我正在尝试以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
但这种感觉非常恶劣,必须有更好的方法。
答案 0 :(得分:7)
问题是Ecto不知道日期时间是否是UTC。幸运的是,Ecto 2.1有一个更好的选择,因为它支持Elixir 1.3的内置日历类型。
模式中有两种新类型 - naive_datetime
存储没有时区的日期时间(使用Elixir的NaiveDateTime
结构),以及utc_datetime
存储日期时间的UTC时区(使用Elixir的DateTime
struct)。后来序列化为iso8601,最终为Z
。