蛋糕PHP在X天后过期


CakePHP Expire Post after X days

使用博客教程,我希望有一个选项,您可以在"主"索引页面上查看帖子,直到帖子活跃 x 天。在 x 天的这段时间之后,我希望帖子在数据库中设置为"过期"。谁能阐明实现这一目标的最佳方法?

如果使用分

页,请使用:

注意这里$x是你的内脏

$this->Post->recursive = 0;
$this->paginate = array(
            'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
        );
$this->set('posts', $this->paginate());

对于普通的find(),请使用以下命令:

$this->Post->find('all', 
                   array(
                    'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
                   )
                 );

可能最好的方法是使用 SQL select 语句。 MySQL有许多内置的日期方法。 但首先,我们需要定义您要完成的目标。 另请注意,我们使用的字段(created_atallotted_time)都是DATE字段。

您要做的是仅显示当前正在运行的帖子。 由于我们知道广告的开始日期,因此我们可以从当前日期中减去开始日期,以确定距离广告过期还剩下多少时间。 这可以通过DATEDIFF函数和CURDATE函数来实现。

DATEDIFF(CURDATE(), `created_at`)

如果您尝试执行上述语句,您会注意到它返回一个整数,即自广告首次创建以来经过的天数。 由于DATEDIFF返回一个整数,我们也需要将allotted_time转换为整数。

DATEDIFF(`allotted_time`, `created_at`)
现在,我们知道广告已经投放了

多少时间,以及广告创建之日后必须投放多少天。 显然,如果广告的投放时间少于创建日期与分配时间之间的天数,则该广告仍在投放。

WHERE DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)

把这些放在一起,我们得到一个类似的陈述。

SELECT `id`
FROM `ads`
WHERE
    DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)