我要做的是,每天两次脚本将通过cron运行,它会检查用户购买服务的日期(purchased_added
是列)。我想查看哪个购买日期是今天的日期前27天,例如
购买服务: 2017-02-09 02:01:35 27天后他们会: 2017-03-08 02:01:35 脚本找到它将发送电子邮件的目标。
到目前为止,我有:
if (isset($_GET['notify'])) {
include('includes/db_connection.php');
include('includes/functions.php');
// first get all the purchased dates out...
$dates = DB::getInstance()->select('SELECT * FROM `purchased` ORDER BY `purchased_added` ASC');
foreach ($dates as $r) {
echo $r['purchased_added'] . "<br />";
// dates - purchased & now
//$datePur = date('m.d.y', strtotime($row['purchased_added'])
//$dateNow = date('m.d.y');
// any links due for payment?
if (date('m.d.y', strtotime($r['purchased_added']. ' + 27 days')) < date('m.d.y')) {
// email these users
}
}
}
我的if语句对我来说是错误的,有没有更简单的方法来实现这一目标?我觉得我太复杂了。
答案 0 :(得分:1)
您可以直接比较时间戳:
if(strtotime($r['purchased_added']. ' + 27 days') < time())
或使用与所需排序兼容的日期格式(&#39; 17.02.09&#39;&lt;&#17; 17.03.08&#39;但如果日/年,这通常会被违反被翻转):
if(date('y.m.d', strtotime($r['purchased_added']. ' + 27 days')) < date('y.m.d'))
或者最好使用DateTime
:
$current_dt = new DateTime("now");
$dt = new DateTime($r['purchased_added']. ' + 27 days');
if($dt < $current_dt)
....
甚至
$current_dt = date_create("now");
if(date_create($r['purchased_added']. ' + 27 days') < $current_dt)
....
答案 1 :(得分:0)
我建议您在SQL查询本身中实现此逻辑。如果您的表有很多行,您也可以向purchase_added添加索引。您还可以在发送电子邮件后添加一个标记列(或发送多少封电子邮件)。
SELECT * FROM `purchased` WHERE `purchased_added` < DATE_ADD(NOW(), INTERVAL -27 DAY)
这只会返回purchase_added超过27天前的行。
这样你就不会从表中读取所有记录,如果表变大,以后只需添加一个索引。