我正在尝试以timestamp
inserted_at
json的形式提供自动字段.
问题是Chrome和Firefox在分析发送内容方面存在分歧.问题似乎是菲尼克斯默认提供的服务"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
但这感觉非常黑客,必须有一个更好的方法.
问题是Ecto不知道日期时间是否是UTC.幸运的是,Ecto 2.1有一个更好的选择,因为它支持Elixir 1.3中的内置日历类型.
模式中有两种新类型 - naive_datetime
存储没有时区的日期时间(使用Elixir的NaiveDateTime
结构),并将utc_datetime
日期时间存储在UTC时区中(使用Elixir的DateTime
结构).后来序列化为iso8601与最终Z
.