2013-01-06 49 views
1

我有一個漫畫網站,http://www.hittingtreeswithsticks.com/,我每週添加新的漫畫。我希望新發布的漫畫在發佈日期之後的3天之前保持突出顯示。使用日期以確定何時*新發布*狀態應該過期

所以,這裏是前:

enter image description here

這裏的期望:

enter image description here

我正在考慮以下邏輯:

數據庫

日期目前定於datetime:0000-00-00 00:00:00

PHP:漫畫獲取日期與日期= $行[ '日期'] url參數:

 echo '<ul>'; 
      $imageCounter = 0; 
      while ($imageCounter < $imagesPerPage && ($row = $catResult->fetch_assoc())) {     
       echo '<li>'; 
        echo '<span class="comics"><a href=".?action=viewimage&site='.$site. '&id=' . $row['id'] .'"> 
          <img src="./scripts/thumber.php?date='. $row['date'] . '&img=.' . $thumbpath.$row['thumb'] . '&mw=220&mh=220"/></a> 
          <br /><br /> ' . $row['description'] . '</span>';        
       echo '</li>'; 
       $imageCounter++; 
      } 
    echo '</ul>'; 

然後設置日期時間在該日期...

$datetime1 = date_create($_GET['date']); 

現在,我倒是喜歡莫名其妙定置datetime2 = (datetime1 + 3 days) ...

然後比較...

if ($datetime1 < $datetime2) { 
    set "comics" span class in CSS file to something else that would somehow highlight the newest post... 
} 
else { 
    set "comics" span class in CSS file to default 
} 

有沒有更簡單的方法來完成我想要做的事情?

編輯--------------------------------

我想現在突出顯示最新的漫畫爲期3天......不幸的是,如果條件得到滿足,我很難找出如何突出顯示最新的漫畫,而不是所有的漫畫。

//GET date 
     $desc = (isset($_GET['description']) ? ($_GET['description']) : null); 


    $row = $catResult->fetch_assoc(); 

    $current_date = new DateTime; 
    echo "Current Date: " . $current_date->format('Y-m-d H:i:s'); 

    echo "<br />"; 

    $comic_date = new DateTime($row['date']); 
    echo "Comic Date: " . $comic_date->format('Y-m-d H:i:s'); 

    $comic_date->modify('3 day'); 


    //DISPLAY IMAGES TO CORRECT PAGE FROM DATABASE 
    echo '<ul>'; 
     $imageCounter = 0; 
     while (($row['date'] < $current_date) && ($imageCounter < $imagesPerPage) && ($row = $catResult->fetch_assoc())) { 
       echo '<li>';     
        echo '<span class="comics"><a href=".?action=viewimage&site='.$site. '&id=' . $row['id'] .'"> 
           <img src="./scripts/thumber.php?img=.' . $thumbpath.$row['thumb'] . '&mw=220&mh=220"/></a> 
           <br /><br /> ' . $row['description'] . $row['date'] . '</span>';         
        $imageCounter++; 
       echo '</li>'; 

      } 

     if ($row['date'] >= $current_date) { 
       echo '<li>';     
        echo '<span class="newcomics"><a href=".?action=viewimage&site='.$site. '&id=' . $row['id'] .'"> 
           <img src="./scripts/thumber.php?img=.' . $thumbpath.$row['thumb'] . '&mw=220&mh=220"/></a> 
           <br /><br /> ' . $row['description'] . $row['date'] . '</span>';         
        $imageCounter++; 
       echo '</li>'; 
      } 
    echo '</ul>'; 
+0

我認爲這是太過程中出現。你需要的是一個cron作業,檢查數據庫中的一個標誌(如:is_new)並將值從1和0之間切換。 –

+0

@mamdouhalramadan我仍然需要以某種方式比較日期,對不對? – Growler

+0

當然,但我建議這就是爲什麼它是一個評論而不是答案:)這樣你可以比較今天的日期 - 漫畫創建日期,並檢查答案是否大於三天。 –

回答

2

這是很容易與DateTime比較日期。

示例如何修改和比較日期:

# PHP >= 5.4 
$row['date'] = '2013-01-03 16:15:14'; 
$d = (new DateTime($row['date']))->modify('3 day'); 
echo $d >= (new DateTime) ? 'NEW' : 'OLD'; 

# PHP < 5.4 
$row['date'] = '2013-01-03 16:15:14'; 
$n = new DateTime; 
$d = new DateTime($row['date']); 
$d->modify('3 day'); 
echo $d >= $n ? 'NEW' : 'OLD'; 

OR

可以使用SQL語句來做到這一點:

SELECT 
    t.*, 
    t.date >= DATE_SUB(NOW(), INTERVAL 3 DAY) AS is_new 
FROM 
    someTable AS t 
+0

由於'date> = ...'等條件可以使用索引,而'DATE_ADD(date,date)'從'NOW()'減去3天比'date'列增加3天更爲有效。 ...)> = ...'不能(或者說,MySQL不夠聰明)。 –

+0

@Glavic我如何挑選出我想突出顯示的漫畫?如果你看上面,我的代碼遍歷數據庫中的所有漫畫......參見上面的代碼編輯 – Growler

+1

@IlmariKaronen:更新了我的答案。 @Growler:將'$ comic_date'邏輯放在'while'循環中。 –

-1

一個快速的解決方法就是保存在數據庫的發佈日期,然後將計算所有的客戶端,與一些JavaScript代碼。 您可以通過設置data-posting =「....」等屬性來將發佈日期公開給javascritpt客戶端。

+1

在這種簡單的情況下,我沒有看到使用Javascript的重點。所需的一切都是用於添加邊框的小型CSS代碼。而'更容易'的方式是首選.. –

+0

@barius是的你說得對,我只是說要使用JavaScript計算而不是渲染。當然,css是呈現高光的方法。我建議使用js而不是服務器端的工作或類似的。 –

2

「現在,我想以某種方式設置DATETIME2 =(datetime1 + 3日)......」

使用strtotime()把日期到秒。然後,你可以玩它,你喜歡什麼。

例如:

$expiry_date = strtotime($time_stamp) + 259200; // 259200 = 3 days in seconds 

然後檢查這樣的日期:

if($expiry_date < date("Y-m-d", time()) { 
1

只是爲了保持完整性,我想指出,也可以在SQL查詢中執行此操作,例如像這樣:

SELECT *, (date >= DATE_SUB(NOW(), INTERVAL 3 DAY)) AS is_new 
FROM comics 
ORDER BY date DESC 

demo on SQLize

+0

我無法正常工作。 – Growler

+0

@Growler:你知道,如果你描述一下你的「麻煩」,這可能會有所幫助。 –

+0

好的,我已經更新了上面的代碼。我無法讓你的工作,所以我嘗試了上面的Glavic的想法(PHP日期時間)。 – Growler