我正在寻找一些条件来开始为我的客户开帐单。 每次我的客户与我签订合同时,我都会在属性start_billing_at中初始化一个日期。我现在想知道,如果start_billing_at属性已在上个月初始化。希望我的问题现在更清楚了
寻求帮助
编辑
我知道我的约会是在上个月的第一天和最后一天之间
答案 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