Показать изображение на основе даты в PHP

Где-то на моем компьютере у меня был скрипт PHP для отображения изображения на основе даты, что позволило бы мне отображать разные изображения в определенные даты или между выбранными датами и отображать дату по умолчанию, если текущая дата не указана в списке конкретное изображение для отображения.

Недавно у меня была проблема с одним из моих жестких дисков, и я потерял загрузку файлов, и я боюсь, что этот сценарий был одним из них среди них, поскольку я не могу найти его нигде.

Я не могу вспомнить, где я нашел сценарий. Я просматривал онлайн и не могу найти его снова. Я думал, что это было здесь, но после обыска я не могу найти ничего смутно, не говоря уже о сценарии, к сожалению. <_ <

Возможно, я использую неправильные условия поиска (я пробовал такие вещи, как «дата показа изображения php»), но я не нахожу ничего подобного.

Кто-нибудь знает что-то, что соответствует описанию выше, или может предложить лучший способ сделать это?

Я думаю, что мне нужно указать образ по умолчанию, если текущая дата имеет определенное изображение и, вероятно, блок кода case / break может быть лучшим способом сделать это, чем if / else ….

У кого-нибудь есть какие-то мысли о том, как это сделать?

Редактировать: Спасибо всем за ваши предложения. Я не особо увлекался использованием if / else / elseif, но в итоге это был самый простой способ его достижения. То, как я это сделал, вероятно, не самый эффективный способ кода, но он работает пока.

(часть кода – это довольно длинная, поэтому я не буду вас утомлять)

«Хммм … ладно, спасибо. Это объясняет, почему то, что я пытаюсь сделать, не работает! :лол:

Хотя я видел другие способы сделать это, включая цикл foreach и GD, я застрял с if / elseif / else в конце. Вероятно, это не самый эффективный способ сделать это, но это сработало в конце (часть кода в любом случае – это очень длинный список, и я не буду вас утомлять!):

<?php // Macmillan Cancertalk week (21-25 Jan) if ((date('m') == 01) && (date('d') >= 21) || (date('m') == 01) && (date('d') <= 23)) { echo "<img src=\"images/ribbons/cancertalk.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } // Macmillan Cancertalk week (21-25 Jan) and Cervical Cancer Awareness Week (24-30 Jan) else if ((date('m') == 01) && (date('d') == 24)) { echo "<img src=\"images/ribbons/macmillan_cervical.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk and white and teal awareness ribbons\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week &amp; Cervical Cancer Awareness Week <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } // Macmillan Cancertalk week (21-25 Jan), Cervical Cancer Awareness Week (24-30 Jan) and Beating Bowel Cancer - Be Loud Be Clear Week (25-31 Jan) else if ((date('m') == 01) && (date('d') == 25)) { echo "<img src=\"images/ribbons/macmillan_cervical_bowel.gif\" height=\"145\" width=\"175\" alt=\"Macmillan Cancertalk, white & teal awareness ribbons, and blue & brown cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Macmillan Cancertalk Week, Cervical Cancer Awareness Week, and Be Loud Be Clear Week (Beating Bowel Cancer) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } // Beating Bowel Cancer - Be Loud Be Clear Week (25-31 Jan) else if ((date('m') == 01) && (date('d') == 31)) { echo "<img src=\"images/ribbons/brown_blue_ribbon.gif\" height=\"145\" width=\"175\" alt=\"blue and brown cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Be Loud Be Clear Week (Beating Bowel Cancer) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } // International Childhood Cancer Day (15 Feb) else if ((date('m') == 02) && (date('d') == 15)) { echo "<img src=\"images/ribbons/gold_ribbon.gif\" height=\"145\" width=\"175\" alt=\"gold cancer awareness ribbons\" /><br /><h6 class=\"awareness\">International Childhood Cancer Day <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } // Gynaecological Cancers Campaign (1 Feb to 31 March) else if ((date('m') == 02) && (date('d') >= 01) || (date('m') == 02) && (date('d') <= 28)) { echo "<img src=\"images/ribbons/teal_ribbon.gif\" height=\"145\" width=\"175\" alt=\"teal cancer awareness ribbons\" /><br /><h6 class=\"awareness\">Gynaecological Cancers Campaign (1st February &ndash; 31st March) <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6>"; } else { echo "<a class=\"awareness_link\" href=\"the-bookstall-cancer-links-and-resources.php\"><img src=\"images/ribbons/default_ribbon.gif\" height=\"145\" width=\"175\" alt=\"calendar\" /><br /><h6 class=\"awareness\">Check our awareness calendar for information about awareness events &ndash; <span class=\"morelink\"><a href=\"the-bookstall-cancer-links-and-resources.php\">more...</a></span></h6></a>"; } ?> 

вы можете использовать функцию date() для проверки текущего месяца / дня / года и некоторых простых конструкций if / else для отображения разных изображений.

Лучшим способом сделать это, вероятно, будет просто использование GD для его отображения.

 <?php // Create a 75*15 image $im = imagecreate(75, 15); // White background and black text $bg = imagecolorallocate($im, 255, 255, 255); $textcolor = imagecolorallocate($im, 0, 0, 0); // Write the date at the top left, offset by 2px to the right imagestring($im, 5, 2, 0, date("m/d/y"), $textcolor); // Output the image header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> 

Похоже, что раньше вы копировали / вставляли свой код, но это действительно хороший фрагмент, чтобы узнать, если вы за него. Основная конструкция, которую вы ищете:

 $today = getdate(); $day = $today['wday']; if ($day == 1 OR $day == 2 OR $day == 3){ echo "<img src='whatever image you want'>"; } elseif ($day == 4 OR $day ==5){ echo "<img src='another image' />"; } else { echo "<img src='default image' />";} 

В основном вы найдете дату и используя петли IF / ELSE, определите, находится ли сегодня в одном диапазоне. ЕСЛИ это так, выделите изображение, которое вы хотите показать.

В этом примере переменная $ day устанавливается в число 1-7. 1 == Понедельник, 2 == Вторник, 3 == Среда … Если понедельник или среда понедельник, он показывает одно изображение ( if ($day == 1 OR $day == 2 OR $day == 3) , четверг / пятница показывает другое, и в противном случае он показывает изображение «по умолчанию», которое отображается в выходные дни. Очевидно, это не ТОЧНЫЙ случай дней / дат, которые вы хотите, но что-то вроде этой конструкции поможет вам.

Обратитесь к справочнику PHP Date за помощью, чтобы выбрать, какие даты вы хотите сравнить.

Это мое решение, я гость, может быть, вас не волнует, в каком году, поэтому это решение просто рассматривает месяц и дату:

 function image_of_date($default, $options) { $today = date('md'); foreach ($options as $item) { $src = $item[0]; $begin = $item[1]; $end = (3===count($item))? $item[2] : $begin; $begin = date('md', strtotime($begin)); $end = date('md', strtotime($end)); if ($today >= $begin && $today <= $end) { return $src; } } return $default; } echo image_of_date('default.png', array( array('jan-01.png', 'Jan 1'), array('feb.png', 'Feb 1', 'Feb 29') )); 
 switch(date('Ym-d')) { // multiple dates with same image case '2010-02-15': case '2010-02-07': print '<img src="/path/to/image.jpg" alt="" />'; break; // really long ranges don't work all that well in this solution case '2010-03-01': case '2010-03-02': case '2010-03-03': case '2010-03-04': case '2010-03-05': case '2010-03-06': case '2010-03-07': case '2010-03-08': case '2010-03-09': case '2010-03-10': print '<img src="/path/to/image.jpg" alt="" />'; break; // specific date image case '2010-12-25': print '<img src="/path/to/christmas.jpg" alt="" />'; break; // fallback image default: print '<img src="/path/to/default.jpg" alt="" />'; break; } 

Если вы делаете много больших диапазонов дат, это сломается, но оно хорошо работает для нескольких небольших диапазонов и конкретных дат.

Считаете ли вы использование массива, который вы используете?

 $events = array( array( 'image' => 'img/1.png', 'start' => '01-02-2014', 'end' => '02-02-2014' ), array( 'image' => 'img/2.png', 'start' => '03-02-2014', 'end' => '04-02-2014' ) ); 

и затем вы просто продолжаете его с помощью

 foreach($events as $event) { if(date('dm-Y') >= $event['start'] && date('dm-Y') <= $event['end']) { echo "<img src='".$event['image']."'>"; } } 

Надеюсь, это немного проще / чище для вас. И, конечно, вы можете добавить любые дополнительные данные, которые вы хотите получить в массиве.

~ Джеймс.