我正在构建一个Rails 5.2应用程序。
在这个应用程序中,我正在创建一个自动化(如果这个,那么那个)功能。当用户在自动化中创建一个Action时,他们可以设置一个延迟(在Action执行之前)。它们设置如下:
- 金额(string in DB)
- 类型(小时、天、周、月)
我使用Rails功能(如10.days.from_now)。我从字符串中构建这个日期来获取他们选择的日期。我这样做,它工作得很好:
date = event.delay_amount.to_i.send(event.delay_type).from_now
现在,这个日期相对于另一个日期。例如,项目对象的created_at日期。我想创建一个方法来检查上面构造的日期是否小于项目created_at,我这样做:
def handle_time_period(event)
if event.is_conditioned && event.delay_amount != "0"
date_current = Time.current.to_i
date_constructed = event.delay_amount.to_i.send(event.delay_type).from_now.to_i
date_constructed > date_current ? true : false
else
true
end
end
我有两个问题。
- 我如何确保它们都在同一时区?从数据库(项目created_at我认为必须是UTF),但构建的一个我不知道。
- 我如何用小时、天、周或月来比较这两个日期?
- 为了简单的比较,使用
object.created_at.zone.eql? object2.created_at.zone
要转换到同一时区,可以使用Time.parse(object.created_at).in_time_zone(object2.created_at.zone)
- 您可以将日期转换为UNIX时间格式,
object.created_at.to_i - object2.created_at.to_i
是秒差,如果需要,您可以通过除以60然后除以24来计算小时和天。我建议立即在模块中使用计算,因为我们不知道稍后创建的对象。