我有一个会员资格,每个用户每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
答案 0 :(得分: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
这里的想法是重置所有丢失的月份,即使这个月没有针对特定用户运行 - 因此循环。