3
我已經設置了一個訂閱計劃,它將自動爲用戶每月,每三個月和每年收費。問題是,我如何計算確切的日期來爲用戶收費?我們無法每30天收費一次?因爲不是所有的月份都有30天。如果我們在購買日期收費,那麼在1月30日購買計劃的人將不會在2月份收費,因爲2月份沒有30。這是一個複雜的問題。我該如何解決這個問題?如何計算訂閱計劃的下一個更新日期?
PS:使用Ruby on Rails的
我已經設置了一個訂閱計劃,它將自動爲用戶每月,每三個月和每年收費。問題是,我如何計算確切的日期來爲用戶收費?我們無法每30天收費一次?因爲不是所有的月份都有30天。如果我們在購買日期收費,那麼在1月30日購買計劃的人將不會在2月份收費,因爲2月份沒有30。這是一個複雜的問題。我該如何解決這個問題?如何計算訂閱計劃的下一個更新日期?
PS:使用Ruby on Rails的
您可以存儲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
d >> n
→date
返回後,自我指向N個月的日期對象。 n應該是一個數值。
這不僅會導致正確的日期,還會允許針對next_payment_date
的優化查詢以及月份中訂閱時間的平均長度等統計信息。
不錯,不知道日期的>>操作符,我可能會在將來的某個時間點使用它:-) – gernberg
它似乎工作的很好。你能告訴我這是什麼:'''做什麼? – THpubs
@EApubs:我用文檔更新了我的答案。 – spickermann