1

我有一个漫画网站http://www.hittingtreeswithsticks.com/,每周都会添加新漫画。我希望新发布的漫画在发布日期后 3 天之前保持突出显示。

所以,这是之前的:

在此处输入图像描述

这是所需的:

在此处输入图像描述

我正在考虑以下逻辑:

数据库中的日期当前设置为日期时间:0000-00-00 00:00:00

PHP:使用 date = $row['date'] 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>';

然后将 datetime 设置为该日期...

$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>';   
4

4 回答 4

2

“现在,我想以某种方式设置 datetime2 = (datetime1 + 3 days)...”

用于strtotime()将日期转换为秒。然后你可以随心所欲地玩它。

例如:

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

然后像这样检查日期:

if($expiry_date < date("Y-m-d", time()) {
于 2013-01-07T00:02:12.490 回答
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';

或者

您可以使用 sql 语句执行此操作:

SELECT
    t.*,
    t.date >= DATE_SUB(NOW(), INTERVAL 3 DAY) AS is_new
FROM 
    someTable AS t
于 2013-01-07T00:09:38.397 回答
1

为了完整起见,我想指出,也可以在 SQL 查询中执行此操作,例如:

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

关于 SQLize 的演示

于 2013-01-07T00:22:58.883 回答
-1

一个快速的解决方案是将发布的日期保存在数据库上,然后使用一些 javascript 代码将计算全部移动到客户端。您可以通过设置类似 data-posted="...." 的属性将发布日期公开给 javascritpt 客户端。

于 2013-01-07T00:01:53.017 回答