agapofff, еще раз прочитай внимательно: твой расчет верен и стабилен, получаемые даты верны, переключать можно в любой момент.
Если тебе прям надо могу скинуть математическое доказательство - 10-15 строк, но там чисто буквы будут - разберешся?
agapofff, что прыгает? У тебя корректно вычисляет дату от текущего момента. Пойми, что фиксированная дата окончания тарифа в любой момент времени может быть только, если тариф не менялся и не поменяется. Ты изначально отталкиваешся от неверного посыла, а дальше уже наматываешь на это свои рассуждения...
"Но, если мне не изменяет логика, ... дата окончания подписки по новому тарифу должна остаться неизменной с течением времени" - вот тут логика тебе изменила, прими это
agapofff, имхо - сама смена тарифов у тебя в порядке: рассчет остатка + пересчет на новые цены (ну только убрать это количество секунд в месяце). Хотя странный набор входящих данных, я бы ожидал остаток сразу на входе.
agapofff, попробую на пальцах, сори если не понятно:
Время - сейчас
Остаток денег - 1000р
Цена 1 - 100р в день
Цена 2 - 200р в день
Окончание действия - 01.07 по первому и 01.06 по второму
Представим что мы переключили тариф сейчас и подождали 1 день - остаток стал 800р и дата осталась 01.06(ведь мы на втором тарифе).
А теперь представим что мы подождали этот день на первом тарифе - остаток 900р, пересчитываем на второй тариф - получаем дату позже 01.06 - ведь денег у нас больше чем в первом случае, а прошел тот же 1 день.
Цифры с потолка для понятности.
Как говорил выше - у тебя ошибка в рассуждениях: ожидаешь пропорционально уменьшения времени, но забываешь что пропорцию надо брать с использованием цены первого тарифа, а время мы пересчитываем с использованием второй цены.
"а, значит, пропорционально уменьшится и оставшееся время по новому тарифу" - ошибка в логике здесь. время по новому тарифу уменьшится пропорционально цене за старый тариф, а это и дает увеличение даты при пересчете
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Если тебе прям надо могу скинуть математическое доказательство - 10-15 строк, но там чисто буквы будут - разберешся?