Входит ли текущая дата в интервал, если года разные?

Ссылка скопирована
PHP
1 ответ

Здравствуйте!

Есть константы START_YEAR = '01.09'; и END_YEAR = '31.05';.
Они определяют начало и конец учебного года. Данные даты могут меняться (месяц нет, а вот дни - вполне)

Мне нужно понять, входит ли текущая дата в учебный год. Из-за того, что в константах нет года (они универсальные на несколько лет вперед), не могу понять, как проще написать это условие.

Заранее спасибо за помощь!

UPD.
Возможно, я дал мало конкретики. Ситуация такая.
Есть курсы для школьных классов: курс для 1 класса, курс для 2 класса ... курс для 11 класса.
Данные в этих курсах не меняются и создаются сразу для каждого класса один раз.

Когда школьник регистрируется, он указывает свой класс, например 6.
Если текущая дата входит в учебный год, то ему доступен только курс для его класса.
В мае, доступ закрывается до сентября. В сентябре - школьнику доступен курс уже за 7 класс и т.д.
Так как курсы создаются за один раз и могут быть доступны в любой год, я не могу привязывать к курсу какие-то даты. Также, еще сложность: в этом году, например, 1 сентября - это воскресенье, значит начало учебного года будет не 01.09, а 02.09 - поэтому дни тоже нужно проверять.

Дополнительно:

добавить год?)

  • Dmitry Bay, может быть. Но даты из констант должны быть в разных годах.
    Например, если текущая дата 11.03.2024, для START_YEAR я добавляю текущий год - 1, а для END_YEAR добавляю текущий.
    Но как быть если текущая дата, например, 11.10.2024. Если я укажу текущий год - 1, то будет 2023, хотя должен быть 2024, т.к. это начало учебного года. Нужно делать и проверку по месяцу и если он до 12, то не отнимать от текущего года. В общем, очень много проверок получается. Поэтому я и подумал, может можно как-то проще это сделать.
  • Данные даты могут меняться

    А как вы определите, что в конкретном году были/будут другие даты? Или интересует только текущий год?

  • Rsa97, интересует только текущий учебный год.
    Т.е. промежутками: 2024-2025, 2025-2026 и т.д.
  • Rsa97, мне по задаче нужно показывать кнопку "Перейти к урокам". Если дата в учебном году - смотрят уроки, если нет - ждут.
  • Если я правильно понял, то можно смотреть на месяц и определять в интервале он или нет, т.е создать массив с месяцами и от даты получать месяц, через preg_match например, и искать в массиве, если есть то делать
  • bichara2002, вариант. Но мне еще нужно и дни учитывать. Т.е. это пока 01.09 и 31.05, но может быть 10.09 и если делать проверку в массиве по месяцам, то текущая дата 05.09 будет подходить, но не пройдет по дате.
  • Выкиньте на хрен эти константы и сделайте нормальную таблицу с данными за все годы, которые вам нужны.
    И вся эта пляска в мешке потеряет смысл.
  • Лев Салатов, если нужно чтобы не открыли раньше, то можно сначало проверять месяц, потом смотреть, текущая дата больше даты доступа или нет.
    If(strtotime($date1)<strtotime($date2)){ ... }

    If(strtotime($date1)<strtotime($date2)){ ... }

  • Я бы таймстампами интервал посчитал
  • Adamos, возможно, я дал мало конкретики. Написал в UPD к вопросу.
  • bichara2002, возможно, я дал мало конкретики. Написал в UPD к вопросу.
  • Дмитрий, возможно, я дал мало конкретики. Написал в UPD к вопросу.
  • ВоскресенЬе это называется. И совершенно непонятно, кому и зачем нужно это проверять. Синдром вахтера, имхо.
    Когда школьник указывает свой класс, пересчитайте его к году поступления. Потом элементарно определите, курс за какой год ему сейчас должен быть доступен, если нынешняя дата попадает в однажды, без делания головы, однозначно созданный интервал учебного года за этот год.
    Впрочем, вычислить этот интервал, отталкиваясь от сегодняшней даты, тоже элементарно. Просто проверить, не попадает ли эта дата в диапазон от последней пятницы мая до первого будня сентября. Исключительно.
  • Adamos, за орфографию спасибо, поправил.
    По синдрому вахтера - скажите это министерству образования, которое начало учебного года привязывает к будним дням недели.
    За идею - спасибо, подумаю.
  • $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
    Анна SEO Ответ

    Для определения того, входит ли текущая дата в заданный интервал (если года разные), можно воспользоваться следующим подходом:

    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 на нужные вам даты интервала.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно