在PHP中基于日期显示图像

时间:2010-02-07 16:54:24

标签: php image date

在我的计算机上的某个地方,我有一个用于显示基于日期的图像的PHP脚本,这将允许我在特定日期或所选日期之间显示不同的图像,并在当前日期不显示时显示默认日期列出一个要显示的特定图像。

我最近遇到了一个我的硬盘驱动器出现问题并丢失了大量文件,我担心这个脚本是其中之一,因为我无法在任何地方找到它。

我不记得我在哪里找到了这个剧本。我在网上看了一遍,再也找不到了。我以为它就在这里,但在搜索之后我找不到任何模糊的东西,更不用说脚本本身了。 < _<

也许我使用了错误的搜索词(我一直在尝试像“php显示图像日期”这样的东西),但我找不到类似的东西。

有没有人知道任何符合上述描述的内容,或者可以建议最好的方法来做到这一点?

我认为我需要为当前日期指定的特定图像指定一个默认图像,并且可能是一个案例/中断代码块可能是比if / else ....更好的方法。 / p>

有人对最佳方法有任何想法吗?

编辑:感谢大家的建议。我并不是特别热衷于使用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>";
    }
?>

8 个答案:

答案 0 :(得分:5)

您可以使用date()函数检查当前月/日/年以及一些简单的if / else结构来显示不同的图像。

答案 1 :(得分:3)

最好的方法可能只是使用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);

?>

答案 2 :(得分:2)

听起来你之前正在复制/粘贴你的代码,但如果你想要它,这真的是一个很好的片段。您正在寻找的基本构造是:

$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 reference以获取有关选择要比较的日期的帮助。

答案 3 :(得分:1)

switch(date('Y-m-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;
}

如果你做了很多大的日期范围,那么它会崩溃,但它适用于一些小范围和特定日期。

答案 4 :(得分:1)

这是我的解决方案,我拜访也许你不关心哪一年,所以这个解决方案只考虑月份和日期:

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')
));

答案 5 :(得分:0)

您是否考虑使用循环播放的数组?

$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('d-m-Y') >= $event['start'] && date('d-m-Y') <= $event['end']) {
    echo "<img src='".$event['image']."'>";
  }
}

希望这对您来说更简单/更清洁。当然,您可以在阵列中添加任何其他详细信息。

〜詹姆斯。

答案 6 :(得分:0)

小心使用包含前导零的两位数日期。 PHP 将其解释为八进制数字,如果使用 '08' 和 '09',它将返回错误。当我试图将 9 月设置为我的 elseif 案例的月份时,我发现了这一点。

答案 7 :(得分:0)

我认为有一个更好、更复杂的解决方案来为来年的每一天获取不同的图像。

下面提到的脚本将每天向您展示不同的图像。 可用图像将被旋转而不是随机选择。 该脚本可以处理任意数量的可用图像, 所以您不必上传 365/366 图片。

准备:

  • 为您的图片创建一个独特的目录。
  • 给所有图像名称链接 0.jpg // 1.jpg // 2.jpg // 3.jpg // 等等。
  • 并将下面提到的 php 脚本集成到您想要显示的位置。
  • 仅此而已。

php-script for rotating image of the day