Kakto-Tak
@Kakto-Tak

Как сделать вывод в зависимости от праздника на php?

Всем привет. Что-то не могу никак придумать решение или найти него в просторах интернетов.
Задача в общем-то тривиальная:
Есть праздники, такие как НГ, 23 февраля, 8 марта.
Нужно сделать автоматическую замену логотипа, чтобы за 2 дня до и после праздника показывался соответственный.
Пробовал делать привязку ко дню года:
$today = date("z");
$array_days = array('1','2','3','4','5','6','7','8','9','10','64','77','121','129','163','308','360','361','362','363','364','365','366'); 
if(in_array($today,$array_days)) {
echo "<img src=\"/img/logo_$today.png\">;
}

Но тогда нет отображения за два дня до и после...
Мыслей больше нет, может кто что свежего подскажет?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Kennius
Начинающий фронт-эндер
Как вариант проверять его по https://isdayoff.ru/20190101 на выходе если 1, то праздничный день, если 0 то нет, ну и +-2 дня от этой даты
про формат даты на сайте можно почитать
И привязываться к порядковому дню не получится так как есть високосные года
Ответ написан
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Самый простой способ - это закинуть в массив еще по 2 дня + и по 2 дня -
Так же можно через if все прописать, правда будет побольше
if ($today == 62 or $today == 63 or $today == 64 or $today == 65 or $today == 66)
    echo "<img src=\"/img/8_marta.png\">";

Но все эти способы рушатся, когда мы понимаем, что бывают високосные года. Или не рушатся, если проверять год ;-)
Ответ написан
zoozag
@zoozag
Opencart
for ($i = -2; $i <= 2; $i++) {
  $day = $today+$i;
  if(in_array($day,$array_days)) {
    echo "<img src=\"/img/logo_$day.png\">";
    break;
  }
}
Ответ написан
Комментировать
stratumforce
@stratumforce
С использованием дат и timestamp'ов:
$array_days = array('0101','0201','0301','0401','0501','0601','0701','0801','0901','1001','2302','0803','3012','3112');
$current_day = date("d-m-Y");
// timestamp текущей даты
$timestamp_current = strtotime($current_day);
// Максимальная разница между датами в секундах (172800 = 2 дня, 86400 = 1 день)
$diff_max = 172800;

foreach ($array_days as $day) {
    // Приводим запись к нужному формату: d-m-Y
    $date = substr_replace($day, "-", 2, 0)."-".date("Y");
    // Получаем timestamp
    $timestamp_day = strtotime($date);
    // Проверяем разницу между датами
    if (abs($timestamp_day - $timestamp_current) <= $diff_max) {
        echo "<img src=\"/img/logo_$today.png\">;
        break;
    }
}

Здесь важно, чтобы в списке были даты "3012", "3112" и т.д., какие еще нужны, иначе придется еще и по году сверять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы