2012-03-16 5 views
3

Rails를 사용하여 JQuery 날짜/시간 선택기에서 시간대를 처리하는 데 문제가 있습니다. datepicker에 현지 시간대가 올바르게 표시됩니다. 문제는 선택한 날짜를 데이터베이스에 저장할 때 레일스가 클라이언트의 시간대에 있더라도 UTC 시간으로 저장한다는 것입니다. 시간을 utc (Time.zone.parse (params [: time]). utc)로 변환하려고하면 params [: time]과 같은 값을 갖습니다. 이것은 로컬 시간입니다.Rails jquery datepicker timezones

environment.rb 파일에서 config.time_zone 설정을 변경하고 싶지 않습니다. 서버의 현지 시간대에 시간을 저장하지 않으려합니다.

내가 원하는 것은 현지 시간을 받고 utc로 변환하기 때문에 시간이 utc로 설정된 서버에서 cron 작업을 예약 할 수 있습니다. 사용자의 현지 시간대로 데이터베이스에 시간을 저장하고 싶습니다. 그러나 클라이언트의 시간대를 얻을 수있는 방법을 찾을 수 없습니다!

다른 옵션이 있습니까 .. 날짜 표시기에 옵션으로 시간대를 추가하는 것 외에 다른 방법이 있습니까?

답변

2

DateTime Picker는 사용자에게 정확한 시간을 제공합니다. 시간을 분석하고 사용자의 시간대를 조정 한 다음 적절한 양을 더하거나 뺍니다. 시간. 여기에 내가 그것에 대해 갔다 방법은 다음과 같습니다

# convert your param from a datepicker string to time: 

start_time=DateTime.strptime(params[:start_time], "%m/%d/%Y %H:%M:%S").to_time 

# datepicker gives times in UTC to your server *BUT* it appears in the local time to the user. Make sure to adjust for this time difference. 

start_time = start_time.in_time_zone(current_user.time_zone) # I let users pick their time zone. 

# account for DST. does this work? I think so. 
offset = (start_time.utc_offset)/60/60 

# now adjust by the hours offset. you likely want to keep the time in utc for your database... 

adjusted_start_time = (start_time-offset.hours).utc 
서로

relavent 정보가 SO Convert UTC to local time in Rails 3를 게시 :

# Rails has it's own names. See them with: rake time:zones:us To see other zone-related rake tasks: rake -D time 

# So, to convert to EST, catering for DST automatically: 

Time.now.in_time_zone("Eastern Time (US & Canada)")