如何知道日期是上个月还是更早?

时间:2017-08-31 07:55:12

标签: ruby-on-rails ruby date datetime

我正在寻找一些条件来开始为我的客户开帐单。 每次我的客户与我签订合同时,我都会在属性start_billing_at中初始化一个日期。我现在想知道,如果start_billing_at属性已在上个月初始化。希望我的问题现在更清楚了

寻求帮助

编辑

我知道我的约会是在上个月的第一天和最后一天之间

4 个答案:

答案 0 :(得分:1)

减去两个日期并在其上调用to_i将为您提供天数差异,您可以启用它:

if (Date.today - other_date).to_i < 30
  # less than a month
else
  # more than a month
end

当然,这并不完全符合这几个月,但对于我的用例,它通常已经足够好了。

另一种选择是:

if date_to_check > Date.today.last_month
  # within the last month
end

或检查是否包含在上个月的日期范围内:

last_month = Date.today.last_month
(last_month.beginning_of_month..last_month.end_of_month).cover?(date_to_check)

答案 1 :(得分:0)

%w|2017-07-01 2017-06-01|.map do |d|
  (Date.today.month - Date.parse(d).month) % 12 == 1
end
#⇒ [true, false]

答案 2 :(得分:0)

这是我的解决方案,基于Michael kohl解决方案

def calcul_bill(date)
  if Time.zone.today.last_month.strftime('%b, %Y') == date.strftime('%b, %Y')
    #Do actions
  else
    #Do other actions
  end
end

我的日期格式为“2017年8月30日星期三”就是这种情况,所以我只是比较月份和年份

答案 3 :(得分:0)

我相信我会选择:

start_billing_at.beginning_of_month == Date.today.last_month.beginning_of_month

通过细化,您可以在日期定义一个方法,允许您:

start_billing_at.last_month?

所以:

module BillingDateExtensions
  refine Date do
    def last_month?
      self.beginning_of_month == Date.today.last_month.beginning_of_month
    end
  end
end

...您可以通过以下方式将其混合到您需要的日期:

using BillingDateExtensions