@ TheVillageIdiot,
(A)> Сейчас 2010,
Все идет нормально . , ,
(B)> предположим, что пользователь просматривает прошлую транзакцию 2009 года,
Да, я с тобой. , ,
(C)> когда он подал запрос на продление подписки с 21-10-2008 до 20-10-2009.
Таким образом, вы можете увидеть где-нибудь в базе данных или в файле журнала, что подписка была с 21-10-2008 по 20-10-2009, верно?
(D)> Но у него есть льготный период и он просил возобновить его 16 января 2010 года.
Хорошо. Но эта дата транзакции (16-01-2010) не должна иметь значения для фактического начала и конца подписки. Это является частью ограничения на то, когда может произойти «обновление». (Другая часть ограничения - это 2 месяца до истечения срока действия, о котором вы упоминали ранее.) Поэтому вам никогда не нужно учитывать, когда обновленный человек узнает даты начала и окончания подписки.
(E)> Поскольку я не храню где-либо с 21-10-2008 по 20-10-2009
Подождите, тогда как в (С) вы знаете, что подписка была с 10/08 по 10/09 ????
(F)> Я должен подсчитать, что это было с 21-10-2008 по 20-10-2009, когда запрос был зарегистрирован. И вот тут у меня проблемы.
Да, если вы не храните его где-нибудь; Я не понимаю, как вы узнали бы, что это было с 21-10-2008 по 20-10-2009 или с 25-10-2008 по 24-10-2009 или с 21-10-1908 по 20-10-1909.
Я действительно думаю, что выше в части (C) у вас должны быть где-то даты начала и окончания подписки, и, как я прокомментировал (D), вы должны иметь возможность игнорировать, когда была сделана фактическая транзакция запроса на обновление, чтобы вычислить начало следующего семестра.
Хорошо, теперь я собираюсь предположить, что у вас действительно нет даты начала и окончания подписки для прошлых подписок, сохраненных где-то. (В это мне очень трудно поверить.)
Вот возможный ответ на ваш вопрос:
У вас есть текущая дата истечения срока действия клиента (в противном случае вы бы не знали, когда начинать предыдущее двухмесячное окно обновления или трехмесячное льготное окно). Таким образом, учитывая текущую дату окончания подписки, вы можете работать в обратном направлении год за годом. Таким образом, вы сможете восстановить все прошлые подписки клиента.
Тем не менее, существует проблема, связанная с тем, что если клиент не смог продлить подписку в течение льготного периода, возможно, новая подписка началась с разрывом во времени по сравнению с предыдущей.
В любом случае, дважды проверьте, чтобы убедиться, что нет никакого способа определить дату начала и окончания подписки. Я думаю, вы где-нибудь их найдете и сможете поместить в свою базу данных.
Удачи.