Входит ли текущая дата в интервал, если года разные?
Здравствуйте!
Есть константы START_YEAR = '01.09'; и END_YEAR = '31.05';.
Они определяют начало и конец учебного года. Данные даты могут меняться (месяц нет, а вот дни - вполне)
Мне нужно понять, входит ли текущая дата в учебный год. Из-за того, что в константах нет года (они универсальные на несколько лет вперед), не могу понять, как проще написать это условие.
Заранее спасибо за помощь!
UPD.
Возможно, я дал мало конкретики. Ситуация такая.
Есть курсы для школьных классов: курс для 1 класса, курс для 2 класса ... курс для 11 класса.
Данные в этих курсах не меняются и создаются сразу для каждого класса один раз.
Когда школьник регистрируется, он указывает свой класс, например 6.
Если текущая дата входит в учебный год, то ему доступен только курс для его класса.
В мае, доступ закрывается до сентября. В сентябре - школьнику доступен курс уже за 7 класс и т.д.
Так как курсы создаются за один раз и могут быть доступны в любой год, я не могу привязывать к курсу какие-то даты. Также, еще сложность: в этом году, например, 1 сентября - это воскресенье, значит начало учебного года будет не 01.09, а 02.09 - поэтому дни тоже нужно проверять.
Дополнительно:
добавить год?)
Например, если текущая дата 11.03.2024, для START_YEAR я добавляю текущий год - 1, а для END_YEAR добавляю текущий.
Но как быть если текущая дата, например, 11.10.2024. Если я укажу текущий год - 1, то будет 2023, хотя должен быть 2024, т.к. это начало учебного года. Нужно делать и проверку по месяцу и если он до 12, то не отнимать от текущего года. В общем, очень много проверок получается. Поэтому я и подумал, может можно как-то проще это сделать.
Данные даты могут меняться
А как вы определите, что в конкретном году были/будут другие даты? Или интересует только текущий год?
Т.е. промежутками: 2024-2025, 2025-2026 и т.д.
И вся эта пляска в мешке потеряет смысл.
If(strtotime($date1)<strtotime($date2)){ ... } |
If(strtotime($date1)<strtotime($date2)){ ... }
Когда школьник указывает свой класс, пересчитайте его к году поступления. Потом элементарно определите, курс за какой год ему сейчас должен быть доступен, если нынешняя дата попадает в однажды, без делания головы, однозначно созданный интервал учебного года за этот год.
Впрочем, вычислить этот интервал, отталкиваясь от сегодняшней даты, тоже элементарно. Просто проверить, не попадает ли эта дата в диапазон от последней пятницы мая до первого будня сентября. Исключительно.
По синдрому вахтера - скажите это министерству образования, которое начало учебного года привязывает к будним дням недели.
За идею - спасибо, подумаю.
$date = new DateTimeImmutable(); $isInAcademicYear = ( $date <= new DateTimeImmutable('31 May') || $date >= new DateTimeImmutable('01 September') ); var_dump($isInAcademicYear); // true |
$date = new DateTimeImmutable(); $isInAcademicYear = ( $date <= new DateTimeImmutable('31 May') || $date >= new DateTimeImmutable('01 September') ); var_dump($isInAcademicYear); // true
- Отличный вариант! Большое спасибо!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для определения того, входит ли текущая дата в заданный интервал (если года разные), можно воспользоваться следующим подходом:
1. Сначала определим начальную и конечную даты интервала, а также текущую дату:
```php
$start_date = '2022-01-01'; // начальная дата интервала
$end_date = '2022-12-31'; // конечная дата интервала
$current_date = date('Y-m-d'); // текущая дата
```
2. Затем преобразуем все даты в формат временной метки, чтобы их можно было сравнивать:
```php
$start_timestamp = strtotime($start_date);
$end_timestamp = strtotime($end_date);
$current_timestamp = strtotime($current_date);
```
3. После этого проверим, входит ли текущая дата в заданный интервал:
```php
if ($current_timestamp >= $start_timestamp && $current_timestamp <= $end_timestamp) {
echo 'Текущая дата входит в интервал';
} else {
echo 'Текущая дата не входит в интервал';
}
```
Этот код позволит вам определить, входит ли текущая дата в заданный интервал (с разными годами). Просто замените значения переменных $start_date и $end_date на нужные вам даты интервала.