@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 минут, - то и остаток в деньгах уменьшится, - а, значит, пропорционально уменьшится и оставшееся время по новому тарифу, - и дата окончания подписки по новому тарифу должна остаться неизменной с течением времени.

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽