2017-01-13 8 views
0

Я пытаюсь служить автоматическому timestampinserted_at полем как json.Phoenix default json date разбора по-разному в Chrome/Firefox

Проблема в том, что Chrome и Firefox расходятся в том, как они разбирают то, что они отправляют. Проблема заключается в том, что по умолчанию Phoenix предлагает что-то вроде "2017-01-12T19:49:000". Это анализируется UTC Firefox и IE, а 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 

Но это чувствует себя ужасно Hacky и должна быть лучше.

ответ

7

Проблема в том, что Ecto не знает, является ли дата или нет UTC. К счастью, Ecto 2.1 имеет лучшую альтернативу, так как поддерживает встроенные календарные типы от Elixir 1.3.

Есть два новых типа в схемах - naive_datetime, который хранит DateTime без временной зоны (используя NaiveDateTime-структуру эликсира в), и utc_datetime, который хранит DateTimes в UTC часовом поясе (используя DateTime-структуру эликсира в). Более поздние сериалы к iso8601 с окончательным Z.

 Смежные вопросы

  • Нет связанных вопросов^_^