@agapofff

PHP пересчёт оплаченного времени при переходе на другой тариф: что я делаю не так?

Уважаемые знатоки, прошу помощи, ибо голова кругом.

Есть сервис с подпиской, на котором есть несколько тарифов.

Нужно дать пользователю возможность в любой момент перейти на любой тариф, - соответственно, пересчитав оплаченное время с текущего тарифа на новый.

Расчёт простейший:

$secondsInMonth = 60 * 60 * 24 * 30;                                // количество секунд в периоде оплаты (30 дней)
$paidBefore = strtotime('2021-05-30 23:50:00');                     // дата окончания подписки
$now = strtotime('now');                                            // текущее время
$currentTariffPrice = 1590;                                         // цена текущего тарифа (за 30 дней)
$newTariffPrice = 7990;                                             // цена нового тарифа (за 30 дней)

$currentTariffPriceBySecond = $currentTariffPrice / $secondsInMonth;// получаем цену текущего тарифа за секунду, разделив цену тарифа на количество секунд
$newTariffPriceBySecond = $newTariffPrice / $secondsInMonth;        // аналогично получаем цену нового тарифа за секунду

$secondsRemain = $paidBefore - $now;                                // получаем оставшееся время, вычитая текущее время из даты окончания подписки
$secondsPaid = $secondsRemain * $currentTariffPriceBySecond;        // получаем остаток в деньгах по текущему тарифу, умножив оставшееся количество секунд на цену за секунду

$newTariffSecondsRemain = $secondsPaid / $newTariffPriceBySecond;   // получаем оставшееся количество секунд по цене нового тарифа

$newTariffPaidBefore = $now + $newTariffSecondsRemain;              // получаем дату окончания подписки по новому тарифу, добавляя к текущему времени оставшееся количество секунд по новому тарифу

return date('Y-m-d H:i:s', $newTariffPaidBefore);                   // выводим


Как будто бы, пересчёт на момент запроса происходит корректно, - однако, при следующем запросе результат становится больше.
То есть, считаем - получаем дату.
Ждём 10 минут, считаем заново, - получаем дату на 10 минут больше.

Но, если мне не изменяет логика, раз оставшееся время по текущему тарифу закономерно уменьшилось на прошедшие, допустим, 10 минут, - то и остаток в деньгах уменьшится, - а, значит, пропорционально уменьшится и оставшееся время по новому тарифу, - и дата окончания подписки по новому тарифу должна остаться неизменной с течением времени.

Что я не учёл?
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nazgulun
Вопрос почему дата не статичная? Потому что статичной она может быть только при включенном втором тарифе, а вы тратите деньги по первому пока ждете - тритите меньше чем тратили бы на втором.
То есть к конце промежутка ожидания у вас остается больше денег чем если бы вы ждали с влюченным вторым тарифом - то есть при переключении дата будет больше.
Если проще аналогию - как будто вы приостановили свой домашний интернет на время отпуска за 50р в месяц - время прошло и дата окончания выросла, потому что потрачено меньше денег.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы