2010-02-07 65 views
2

我的計算機上某處有一個基於日期顯示圖像的PHP腳本,這將允許我在特定日期或選定日期之間顯示不同圖像,並顯示默認日期如果當前日期不是與要顯示的特定圖像一起列出的日期。基於PHP中的日期顯示圖像

我最近遇到了一個硬盤驅動器的問題,雖然丟失了大量文件,但我擔心這個腳本是其中的一個,因爲我無法在任何地方找到它。

我不記得我在哪裏找到腳本。我在網上查了很多遍,都找不到了。我認爲這是在這裏,但經過四處尋找,我找不到任何隱約的東西,更不用說劇本本身。也許我使用了錯誤的搜索條件(我一直在嘗試諸如「php display image date」之類的東西),但是我找不到任何類似的東西。

有沒有人知道符合上述描述的任何東西,或者可以建議最好的方法來做到這一點?

我想我需要指定一個默認圖像,如果當前日期獲得指定的特定圖像,並且可能case/break代碼塊可能是比if/else更好的方法。

任何人有任何想法的最佳方式來做到這一點?

編輯:謝謝大家的建議。我並不特別熱衷於使用if/else/elseif,但最終它似乎是實現它的最簡單方法。我這樣做的方式可能不是代碼明智的最有效的方式,但它現在可行。

(代碼的一部分 - 這是相當長的,所以我不會用它所有來煩你)

``嗯....好吧,謝謝。這解釋了爲什麼我試圖做的不工作! :lol:

雖然我已經看到了其他的方式,包括一個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>"; 
    } 
?> 

回答

5

您可以使用date()函數檢查當前月/日/年和一些簡單的if/else結構以顯示不同的圖像。

+0

感謝您的建議。如果/ else不是我最初做的首選方式,但最終似乎是實現它的最簡單方法。我做這件事的方式可能不是最有效的代碼方式,但它現在可以工作。再次感謝。 – BlissC 2010-02-12 19:30:04

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

?> 
+0

謝謝 - 這真的很有用。我從來沒有真正看過GD,它可以做什麼,但這是一個很好的例子 – BlissC 2010-02-07 18:27:10

+0

你也可以使用實際字體......只需上傳arial.ttf等。 ImageMagick可以進行更高級的合成。 – Xorlev 2010-02-07 21:32:02

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; 
} 

如果你做了很多largeish日期範圍,這將打破,但它可以很好地用於一些短小的範圍和具體日期。

+0

謝謝 - 這看起來和我記得的腳本非常相似。日期範圍最多隻有一個月或兩個月,其餘時間可能是幾周或幾天。我只是想知道一些潛在的問題。首先是它是否值得沒有一年(即只有一個月和一天),以及如果有一天說圖像是在不同圖像指定的日期範圍內,會發生什麼情況。我想用它來顯示不同癌症的意識色帶,並且在日期範圍內也可能有一天。 – BlissC 2010-02-07 21:28:26

+0

是的,如果適合您的使用情況,您可以完全跳過一年。 在日期匹配多個條件的情況下,指定的第一個將是顯示的第一個(由於「break」語句)。先把最具體的日期放在首位,將更一般的範圍放在最底部,這樣你的狀態就會很好。 – ceejayoz 2010-02-08 14:23:31

+0

這可能是一個非常愚蠢的問題,但我如何指定日期範圍?我知道如何使用else/if格式並使用一個函數,如'if($ checkDate> $ firstDate1 && $ checkDate <$ firstDate2)',但我不記得如何使用開關/ case/break格式。我試過'case('01 -25','01-31'):'但它根本不喜歡那樣。 'case('01 -25'> ='01-31'):'例如,在我開始添加更多日期之前,似乎可以工作,但是隻有當我有更多的範圍時纔會顯示第一個日期範圍的圖片。 – BlissC 2010-02-08 22:59:25

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尋求幫助選擇您想要比較的日期。

+0

謝謝亞歷克斯 - 這是一個非常有用的片段知道。 – BlissC 2010-02-07 18:23:36

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

謝謝薛 - 解決了使用月份和日期的問題,所以我可以指定月份和日期。正如我在下面的評論,我想知道如果有一天說圖像是在一個不同的圖像指定的日期範圍內會發生什麼。我想用它來顯示不同癌症的意識色帶,並且在日期範圍內也可能有一天 - 即對於特定日期可能有多個圖像 – BlissC 2010-02-07 23:44:46

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']."'>"; 
    } 
} 

希望這是一個稍微簡單/清潔你。當然,你可以添加你想要的任何附加細節。

〜James。