2012-05-08 9 views
0

私は、1つのdbテーブルの列の時間(datetime)にマップする2つのフィールドの日付と時刻を持つフォームを持っています。 フィールドの日付はdatepickerの文字列フィールドで、timeはdatetime_selectです。私はutcタイムゾーンではないので、私はset_dateメソッドで2時間を引く必要があります。モデルのbefore_validationフィルタでdatetime_selectを正しい時間で上書きする方法はありますか?

これをより一般的な方法で実装するにはどうすればよいですか?

# Model 
class Task < ActiveRecord::Base 
    before_validation :set_date 

    def set_date 
    if self.date 
     begin 
     date = Date.strptime(self.date, '%d.%m.%Y') 
     rescue 
     errors.add(:date, "invalid date") 
     return false 
     end 
     # can not get minutes by self.time.minute 
     self.time = DateTime.new(date.year, date.month, date.mday, self.time.hour.to_i, self.time.strftime("%M").to_i) 
     # have to set local time manually 
     self.time = self.time - 2.hours 
    end 
    end 

# Form 
<%= simple_form_for(@task) do |f| %> 
    <%= f.input :date, :as => :string, :input_html => { :class => 'asdatepicker'} %>  
    <%= f.input :time, :as => :datetime, :minute_step => 5, :input_html => { :class => 'input-small'} %> 
... 

# application.rb 
config.time_zone = 'Berlin' 
config.active_record.default_timezone = :local 
+0

私は時間を得るためにdatetime入力を使用しているのを見ます。私は時間入力が十分であると思う。 – Dorian

+0

そうです。現在、set_dateメソッドで日付が正しく設定されているかどうかを確認するためのデバッグのためだけです。 – tonymarschall

答えて

0

あなたはこのようin_time_zone methodを使用することができます。

self.time = DateTime.new(2012, 1, 1, 10, 0, 0).in_time_zone("Mid-Atlantic") 
# => Sun, 01 Jan 2012 08:00:00 GST -02:00 

あなたがrake time:zones:allを使用して、すべての時間帯を見つけることができます。

よろしくお願いいたします。ドリアン

+0

これは機能しません。私はまだ2時間を追加しました。 – tonymarschall

関連する問題