2012-03-16 7 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)")