Обработка данных по дате, которая доступна пользователю
Имеется фрагмент URL формата годМесяц-годМесяц, пример: 202001-202103.
Предположим данный фрагмент у нас хранится в переменной $queryDate
$queryDate = '202001-202103';
Мне необходимо разрешить пользователю получать доступ только в пределах 2020 года, за 12 месяцев. Всё, что он введет меньше 202001 или больше 202012 должно изменятся на 202001 и 202012 соответственно. Как это можно реализовать на PHP?
Ответы (1 шт):
Примерно такое решение написал. В принципе, можно сделать как-нибудь красивее. Через интервалы например.
Первым делом надо разделить Ваш queryDate на строки, хранящие стартовую и конечную даты, например через explode, создать на их основе дату, например через dateTime. А потом что введёт пользователь тоже сравнить с лимитами, предварительно сделав из этого дату.
Я сделал тут циклом, чтобы Вам было проще протестить. Для использования будет достаточно условий из цикла.
Не совсем понятно из вопроса что именно требуется. Ограничение на 12 месяцев, ограничение на год или ограничение на введённые даты.
Для введённых дат:
$queryDate = '202001-202103';
$startDate = DateTime::createFromFormat("Ym", explode("-", $queryDate)[0]);
$endDate = DateTime::createFromFormat("Ym", explode("-", $queryDate)[1]);
$userDates = [
DateTime::createFromFormat("Ym", "201901"),
DateTime::createFromFormat("Ym", "202201"),
DateTime::createFromFormat("Ym", "202010")
];
foreach($userDates as $date)
{
if($date > $endDate)
{
echo "Big date \n";
}
elseif($date < $startDate)
{
echo "Small date \n";
}
echo "Norm date \n";
}
Если надо на 12 месяцев, то
$endDateNew = $startDate->modify("+12 month");
А если надо на год, то можно использовать относительные форматы даты
$endDateNew = $startDate->modify("last day of December this year");