Как дать услугу на один месяц?
Лучше все же хранить не окончание, а начало. Потому что если вы решите предоставлять услуги не на месяц, а на два, то у тех покупок, которые были совершены ДО этого решения, дата окончания будет старая. А это не совсем корректно по отношению к пользователям. Дата начало предоставления услуги - в любом случае константная величина, а дата окончания - рассчитывается по формуле, которая может быть изменена.
На уровне SQL проверить это можно примерно так:SELECT * FROM `...`
WHERE DATE_ADD(`date`, INTERVAL 1 MONTH) > NOW()
Вы правильно начали: в БД храните точную дату окончания услуги. Как проверить, истекла она или нет? Ответ прост: cron. Cron-менеджер запускается с определенным интервалом и дергает заданный скрипт. В этом скрипте обращаетесь к БД, смотрите какие услуги истекли и выполняете соответствующие действия.