2015-04-19 103 views
3

我已經設置了一個訂閱計劃,它將自動爲用戶每月,每三個月和每年收費。問題是,我如何計算確切的日期來爲用戶收費?我們無法每30天收費一次?因爲不是所有的月份都有30天。如果我們在購買日期收費,那麼在1月30日購買計劃的人將不會在2月份收費,因爲2月份沒有30。這是一個複雜的問題。我該如何解決這個問題?如何計算訂閱計劃的下一個更新日期?

PS:使用Ruby on Rails的

回答

6

您可以存儲subscribed_on日期和number_of_payments已經取得了用戶即時通訊。然後通過增加number_of_months並使用日期的>>方法計算下一個付款日期。 >>需要的天數在一個月到:

# at subscription date and first payment 
subscribed_on  = Date.today # in the 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 

documentation

d >> ndate

返回後,自我指向N個月的日期對象。 n應該是一個數值。

這不僅會導致正確的日期,還會允許針對next_payment_date的優化查詢以及月份中訂閱時間的平均長度等統計信息。

+1

不錯,不知道日期的>>操作符,我可能會在將來的某個時間點使用它:-) – gernberg

+0

它似乎工作的很好。你能告訴我這是什麼:'''做什麼? – THpubs

+1

@EApubs:我用文檔更新了我的答案。 – spickermann