【问题标题】:php/mysql: 30 day interval for pre-paid membershipphp/mysql: 预付费会员间隔 30 天
【发布时间】:2015-02-15 22:05:59
【问题描述】:

我有一个会员资格,每位用户每 30 天获得 100 个积分。所有会员资格均需预付一到无限个月的费用。

无论用户是否使用了他的积分,我都想每 30 天将积分余额重置为 100。我不想使用任何 cronjob 或类似的东西。我想简单地检查用户何时登录网站,如果他已经登录了当前的 30 天间隔,如果没有重置他的积分余额。

我的数据库中有会员到期日期和他上次登录时间的时间戳。

谁能给我计算公式?

到目前为止:

$days = ($paid_until - $today) / 60 / 60 / 24;
$months = $days / 30;

echo "<pre>
Expires/ Renews in Days: $days
Expires/ Renews in Months: $months

【问题讨论】:

  • 一个cron实际上是理想的。我会每天运行 cron,并为每个用户设置一个 started_at 日期,这样在一个月中开始的用户不会在其会员资格的开始和结束时获得半个月。然后,您可以按每个用户计算。
  • 您想为每个用户分配额外的 100 个积分,还是只是将他们的积分设置为 100 而不管他们帐户中的积分数是多少?如果是后者,如果他们有超过 100 个学分会发生什么 - 你可以接受他们失去学分吗?
  • 此问答stackoverflow.com/q/11195130 可能会有所帮助。它基于 3 个月,但修改它应该不会有任何问题。
  • @halfer:您的假设是 100% 正确的。无论如何,余额都需要重置为100。但是我不想使用 cron。
  • @Fred-ii- 现在检查一下

标签: php mysql formula


【解决方案1】:

我正在按照这些思路思考。伪代码,可以轻松转换为 PHP(未测试):

start transaction
if (last_reset_date not null)
{
    days_since_reset = last_reset_date
}
else
{
    // Handle the case where no reset has yet been performed
    days_since_reset = now - sign_up_date
    update last_reset_date to sign_up_date
}

months = floor(days_since_reset / 30)
if (months >= 1)
{
    // Add in a reset for every missing month
    for(month = 1 to months)
    {
        update last_reset_date += 30
        store balance in log, month number reset
        reset user balance to 100
    }
}
end transaction

这里的想法是重置所有丢失的月份,即使对于特定用户一个多月没有运行它——因此是循环。

【讨论】:

  • 快到了。但是如果用户每天都在登录呢?他永远不会使用此代码重置他的积分余额。
  • 是的,这就是我的观点@domi771。请问登录应该不会影响吧?应该只是从他们的注册日期开始,每 30 天,他/她的帐户会重置回 100。
  • 不,登录不应影响信用重置周期。我相信它应该每 30 天从到期日开始计算......对我来说太复杂了:)
  • @domi771:你能解释一下你真正想要建立的会计系统吗?如果您不能准确地描述它并使用数据示例,您将无法构建它。不过,让我猜一下:用户有一个sign_up 日期,并且从该日期起每 30 天,他们的帐户应该被重置。发生这种情况时,您可以设置/更新 reset_date,这是 30 天的最后倍数的日期。这将让您检测重置是否到期(如果超过 30 天,则新的重置到期)。听起来怎么样?
  • 这是 100% 正确的,只是我需要计算从到期日 ($paid_until) 算起的 30 天间隔。
猜你喜欢
  • 2012-12-18
  • 1970-01-01
  • 2020-12-07
  • 2011-10-22
  • 2014-11-02
  • 2015-10-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多