如何计算订阅计划的下一个续订日期?

时间:2015-04-19 11:43:28

标签: ruby-on-rails ruby

我已经设置了一个订阅计划,该计划将每月,每三个月和每年自动向用户收费。问题是,如何计算向用户收费的确切日期?我们不能每30天收费一次吗?因为并非所有月份都有30天。如果我们按购买日期收取费用,那么在1月30日购买该计划的人将不会在2月份收取费用,因为2月份没有30。这是一个复杂的问题。我该如何解决这个问题?

PS:我在铁轨上使用红宝石

1 个答案:

答案 0 :(得分:8)

您可以存储subscribed_on日期和用户已设置的number_of_payments。然后在日期增加number_of_months并使用>>方法计算下一个付款日期。 >>将一个月内的天数考虑在内:

# at subscription date and first payment
subscribed_on      = Date.today # in this example: 2015-01-30
number_of_payments = 1
next_payment_date  = subscribed_on >> number_of_payments
#=> 2015-02-28

# after next payment (on 2015-02-28)
number_of_payments = number_of_payments + 1
next_payment_date  = subscribed_on >> number_of_payments
#=> 2015-03-30

# after next payment (on 2015-03-30)
number_of_payments = number_of_payments + 1
next_payment_date  = subscribed_on >> number_of_payments
#=> 2015-04-30

来自Date#>>

的文档
  

d >> ndate

     

返回n之后指向self个月的日期对象。 n应为数值。

这不仅可以返回正确的日期,还可以优化next_payment_date的查询和统计数据,例如以月为单位的平均订阅时长。