2013-06-27 3 views
0

시간별 데이터를 가져 와서 캐싱 한 다음 해당 데이터를 자바 스크립트 스크롤러에서 사용하고 있습니다. 어쨌든. 다음은 주요 문제입니다. 내가 사용하고 있습니다 :레일 시간대가 정말 혼란 스럽습니다

config.time_zone = 'Eastern Time (US & Canada)' 

좋아 잘보고 내가 할 때 내가 뭔가 물건을 보여주는 것

scope :hourly, lambda {|h| 
    g = DateTime.current.beginning_of_day + h.hours 
    where(created_at: g..g+1.hours) 
    } 
    scope :hourly_by_date, lambda {|h,date| 
    g = DateTime.parse(date + " 00:00:00 Eastern Time (US & Canada)") + h.hours 
    where(created_at: g..g+1.hours) 
    } 
    scope :hours_ago, lambda {|h| 
    g = DateTime.current.beginning_of_hour - h.hours 
    where(created_at: g..g+1.hours) 
    } 

다음과 같은 범위를 사용하는 경우 그렇지 않은 것을 제외하고

Entry.first.created_at #datetime -0500 

이 잘 보이는 자정 전후에 작성된 것으로 오후 6시 6 분 (-0700)에 기록을 만들었습니다. 실망스럽지 않고 약간의 지침을 사용할 수 있습니다.

감사합니다.

+0

화가 게시하지 마세요에 대해 UTC로 날짜를 변환하고 값을 비교에 대해. – paxdiablo

+0

'x + y.hours' 대신'y.hours.since (x)'를 변경하면 ('x + y.hours'가있는 곳이면 어디에서든지) 작동합니까? AFAIK,'+'는 시간대를 사용하지 않는다. 나는 틀릴 수도 ... – Amadan

+0

문제는 내 + 시간이 작동하지 않는다는 것입니다. 하지만 SQL 쿼리가 생성되면 UTC를 사용하는 데이터베이스와 비교하여 잘못된 날짜/시간을 사용합니다. –

답변

0

어떻게 데이터베이스

scope :hourly, lambda {|h| 
    g = (DateTime.current.beginning_of_day + h.hours).utc 
    where(created_at: g..g+1.hours) 
    } 
    scope :hourly_by_date, lambda {|h,date| 
    g = (DateTime.parse(date + " 00:00:00 Eastern Time (US & Canada)") + h.hours).utc 
    where(created_at: g..g+1.hours) 
    } 
    scope :hours_ago, lambda {|h| 
    g = (DateTime.current.beginning_of_hour - h.hours).utc 
    where(created_at: g..g+1.hours) 
    } 
+0

범위를 UTC로 설정하면 DST로 인해 1 시간 밖에 남지 않았습니다 (Rails는 애리조나에있을 때 내 서버/사이트가 MDT에 있고 MST에 있음을 알립니다). –

관련 문제