0

1 つの db テーブル列時間 (datetime) にマップされる日付と時刻の 2 つのフィールドを持つフォームがあります。フィールド date は datepicker の文字列フィールドで、time は datetime_select です。私は utc タイムゾーンにいないので、set_date メソッドで 2 時間を減算する必要があります。

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

# 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
4

1 に答える 1

0

次のようにin_time_zone メソッドを使用できます 。

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

よろしく、 ドリアン

于 2012-05-08T11:07:46.857 に答える