2

ユーザーが過去の時間を選択できないようにするために、ユーザーが開始日と終了日に選択したものを現在の時刻と比較しようとしています。私の場合、検証に合格するために4時間先の時間を選択する必要があることを除いて、それは機能します。

意見:

datetime_select(:start_date, ampm: true)

コントローラ:

if self.start_date < DateTime.now || self.end_date < DateTime.now
  errors.add(:date, 'can not be in the past.')
end

self.start_date現在の時刻を返していますが、utc では間違っています。DateTime.now現在の時刻を返していますが、オフセットが -0400 で正しいです。

例:

私の現在の時間は 2013-10-03 09:00:00.000000000 -04:00 です

self.start_date は 2013-10-03 09:00:00.000000000 Z です

DateTime.now は 2013-10-03 09:00:00.000000000 -04:00 です

なぜこれが起こっているのですか?それを修正する最善の方法は何ですか?

4

2 に答える 2

0

start_date を文字列に変換して時間に戻すことで、最終的に修正しました。:localto_time のドキュメントにはそれがデフォルトであると書かれているため、必要だったのは奇妙でしたが、それが存在する場合にのみ機能します。

def not_past_date

  current_time = DateTime.now
  start_date_selected = self.start_date.to_s.to_time(:local)
  end_date_selected = self.start_date.to_s.to_time(:local)

  if start_date_selected < current_time || end_date_selected < current_time
    errors.add(:date, 'can not be in the past.')
  end
end
于 2013-10-08T20:52:33.763 に答える