0

具体的には、1日1つのイベントを毎日同時にスケジュールできるスケジュールモデルがあります。このような:

class Schedule

  include Mongoid::Document
  include Mongoid::Timestamps 

  field :hour,      :type => Integer, :default => 8
  field :ampm,      :type => String,  :default => "am"
  field :time_zone, :type => String,  :default => "Eastern Time (US & Canada)"

  field :monday,    :type => Boolean, :default => true
  field :wednesday, :type => Boolean, :default => true
  field :friday,    :type => Boolean, :default => true

  field :tuesday,   :type => Boolean, :default => false
  field :thursday,  :type => Boolean, :default => false
  field :saturday,  :type => Boolean, :default => false
  field :sunday,    :type => Boolean, :default => false

  embedded_in :user

end

1時間ごとに実行されるレーキタスクがあり、「今」のイベントを必要とするすべてのスケジュールを照会したいだけです。したがって、たとえば、月曜日のUTC正午の場合、:timezone => ESTおよび:hour => 7のスケジュールは、:timezone => PSTおよび:hour=>4のスケジュールと同様に結果に含まれるはずです。もちろん、たとえば火曜日の午前1時は、PST / ESTの両方で月曜日であるため、さらに注意が必要です。

時間を正規化することを考えたので、全員がutcを使用していましたが、誰かが午後11時の水に何かをスケジュールする可能性があるため、これは私にとって日を混乱させることになります。スケジューラフォームでのselectは、データベースに保存した日数とは一致しません。

誰かがモンゴイド固有のソリューションを持っている場合に備えて、私はモンゴイドを使用しています。

4

1 に答える 1

0

日付をUTCで保存するオプションがない場合は、各タイムゾーンを個別にクエリする必要があります。何かのようなもの:

wdays = [:sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday]
now = Time.now
TimeZone.all.each { |time_zone|
  remote_time = now.in_time_zone(time_zone)
  schedules = Schedules.where(
    :time_zone => time_zone.name,
    :hour => remote_time.strftime("%-l").to_i,
    :ampm => remote_time.strftime("%P"),
    wdays[remote_time.wday] => true,
  )
  # process schedules
}
于 2012-06-18T19:07:31.493 に答える