У меня есть членство, где каждый пользователь получает 100 кредитов за интервал в 30 дней. Все членские взносы оплачиваются заранее на срок от одного до неограниченного месяца.
Я хочу обнулять баланс кредитов каждые 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
Я думаю в этом направлении. Псевдокод, который вы можете легко преобразовать в 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
Идея здесь состоит в том, чтобы сбросить все пропущенные месяцы, даже если это не выполняется для конкретного пользователя более месяца — отсюда и цикл.
Других решений пока нет …