Проект, в котором будет возможность оплаты доступа к сервису на различный периоды времени (месяц, три месяца, 6 месяцев, год). Как рассчитывать дату, до которой будет действительна подписка? Считать месяц за 30 дней и исходить из этого числа, или отталкиваться от числа месяца? Может быть есть какие-то стандарты, которых все придерживаются?
Может быть есть какие-то стандарты, которых все придерживаются?
Стандартов не существует, по тому во всяких тарифах и соглашениях следует писать, как расчитывается оплата.
А по какой схеме считать - отталкивайтесь от стоимости производства и ожиданий ваших клиентов (эта схема не должна быть контр-интуитивной или явно невыгодной для одной из сторон)
Делайте как у других сервисов. Например: если сегодня 03.11.2021 21:33, подписка на 1 месяц будет к 03.12.2021 21:33, на 3 месяца — 03.02.2022, на пол года (6 месяцев) — 03.05.2022 и т.д. Я считаю это за стандарт и, честно говоря, даже не знаю сервисов, которые работают по-другому.
В целом да, по моему мнению это тоже наиболее логичный вариант расчета времени. Единственное, где начинаются вопросы, так это когда юзер покупает месячную подписку, допустим, 31 января, и надо думать как будет правильнее перенести эти дополнительные дни. Хотя в то же время подобное - достаточно редкий случай.
If a month doesn’t have the anchor day, the subscription will be billed on the last day of the month. For example, a subscription starting on January 31 bills on February 28 (or February 29 in a leap year), then March 31, April 30, and so on.
hellcaster, вот я изначально и хотел подсмотреть как делают большие ребята, но это оказалось не так просто найти. Беглым поиском тут уж точно не обойтись. Спасибо за ссылки, изучу их.
Мы используем свою платёжную систему, которая позволяет принимать BTC ровно так, как мы захотим, поэтому варианта положиться на стороннюю систему на данный момент нет. У нас получается не автоматическое ежемесячное списание, а ручная оплата, которая добавляет выбранный период времени, и хочется понять, как правильнее настроить расчёт добавляемого времени. В любом случае, учту ваш ответ, спасибо.
Делают и так, и так. Если вы заявляете подписку "на X месяцев", то нужно считать календарные месяцы. То есть, то же самое число месяца через X месяцев.
А если вы заявляете подписку на "X дней", то и считать нужно по календарным дням.
В том языке программирования, на котором делается проект, найдите функцию изменяющую дату/время на указанный промежуток: ИЗМЕНДАТА(месяц, +1, ДатаНачалаПериода), например.
В принципе, на данный момент так расчёт и реализован, однако хотелось бы понять наиболее правильную и общепринятую практику среди сервисов, требующих ежемесячную оплату. К слову, бэк написан полностью на PHP, в котором с использованием класса DateTime можно сделать удобный расчёт дат.