我尝试使用Mongoid将日期时间保存到MongoDB中的事件中。困难在于我想将它们保存在不同的时区(例如柏林和伦敦(。我希望用户(管理员(看到时区中的实际时间,这样他就不需要计算了。之后,我有一个 cron 工作,它每分钟都会寻找一个要处理的事件。
我有以下参数:
application.rb(我尝试没有 -> 标准 UTC -> 伦敦还可以,柏林错误的时间(
config.time_zone = 'Berlin' # as the server stays in Germany
mongoid.yml(尝试了所有组合,需要use_activesupport_time_zone才能获得正确的时间 int oDB(
use_activesupport_time_zone: true
use_utc: false
schedule.rb(到目前为止没有问题(
every 1.minutes do
runner "Event.activate_due", environment: 'development'
end
event.rb(不确定我现在在看哪个时间(
def self.activate_due
events_due = Event.where(:eventStart.lte => (Time.now + 1.minute), :eventStart.gte => (Time.now))
events_due.each do |e|
e.activate
end
end
我尝试在事件#new中更改Time.zone,以描述simple_form中时区的实际时间。它似乎有效,但随后控制器创建方法似乎再次将参数视为标准时区,并错误地转换它(+-1小时时在伦敦/柏林试验时(。我尝试了几乎所有的参数组合,也尝试了Time.now/Time.zone.now。在事件#index中,我切换time_zones以显示正确的时间。
更复杂的是:我将时区保存在区域模型中,该时区通过 areaId 与事件模型连接。
我将如何在表单中向管理员显示他要添加的区域(而不是他的时区(中事件的正确时间,并将其正确保存在 Mongo 中以便稍后通过 cronjob 触发它?
尝试以下操作
def self.activate_due
events_due = Event.where(
:eventStart.to_utc.lte =>(Time.now.to_utc),
:eventStart.to_utc.gte => (1.minute.ago.to_utc))
events_due.each do |e|
e.activate
end
end
请注意,这将适用于 UTC 时间,因此如果您有 UTC - 7 时区的事件,如果服务器时区为 UTC + 2,则认为它现在不会被激活