如何比较日期?

时间:2011-07-19 14:16:11

标签: ruby-on-rails

  get_time_now                = Time.now.strftime('%d/%m/%y') 
  question_deadline_time     = (question.deadline.to_time - 2.days).strftime('%d/%m/%y')


  if get_time_now == question_deadline_time   #2 days till deadline
    Notifier.deliver_deadline_notification(inquiry, question, user, respondent , i)
  end

我需要: 如果截止日期还剩2天,那么我会发送电子邮件。我怎么能这样做?

UPD

我写的时候:

 deadline = question.deadline.midnight - 2.days


        if Time.now.midnight >= deadline

我明白了:

lib/scripts/deadline_notifier.rb:26: undefined method `midnight' for "19/07/11":String (NoMethodError)
    from lib/scripts/deadline_notifier.rb:18:in `each'
    from lib/scripts/deadline_notifier.rb:18

没有午夜我得到:

lib/scripts/deadline_notifier.rb:26: undefined method `-' for "19/07/11":String (NoMethodError)
    from lib/scripts/deadline_notifier.rb:18:in `each'
    from lib/scripts/deadline_notifier.rb:18

2 个答案:

答案 0 :(得分:1)

使用.midnight(或.end_of_day)和2.days的组合来获得你想要的东西:

deadline = question.deadline.midnight - 2.days
if Time.now.midnight >= deadline
  #deliver
end

编辑:

我强烈建议您将question.deadline更改为日期时间。如果您不能这样做,那么您需要将字符串转换为日期以对其执行计算。 @ floor的方法工作正常,或者你也可以这样做:

"2011-07-18".to_date

答案 1 :(得分:0)

从错误中看起来您正在尝试对字符串运行DateTime方法。如果你有一个DateTime对象并在其上运行strftime('%d /%m /%y'),则不能再调用DateTime方法,因为它不再是一个对象,只是一个简单的字符串。所以你不能运行午夜或使用减法操作数。

另外,您存储的字符串是什么格式?您可以尝试使用“日期字符串”.to_date进行投射,然后在其上运行您的方法。