2017-01-13 3 views
0

timestampinserted_at 필드를 json으로 자동 처리하려고합니다.Chrome/Firefox에서 피닉스 기본 json 데이터 구문이 다르게 해석됩니다.

크롬과 파이어 폭스는 전송 된 내용을 분석하는 방식이 다르다는 점에서 문제가 있습니다. 문제는 기본적으로 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 

하지만이 끔찍하게 해키 느낌과 더 나은 방법이 있어야합니다.

답변

7

Ecto는 datetime이 UTC가 아닌지 여부를 알지 못합니다. 다행스럽게 Ecto 2.1은 Elixir 1.3의 내장형 달력 유형을 지원하므로 더 나은 대안이 있습니다. (비약의 DateTime 구조체를 사용하여) (비약의 NaiveDateTime 구조체를 사용하여) 시간대없이 날짜를 저장 naive_datetime 및 UTC 시간대의 날짜 시간을 저장 utc_datetime -

두 개의 새로운 스키마의 유형이있다. 나중에 iso8601에 이어져 Z이 붙습니다.