我必须在30天后发出通知。
foreach ($pdo->query($sql) as $row) {
$date = date_create($row['data']);
$laikotarpas = date_diff(new DateTime("now"), $date);
// var_dump($liko);
$liko = 30 - $laikotarpas->d;
我想在几天内得到正确的结果。 我在2014.03.19添加了一行,这显示了从3天到30年。
我的目标是实现: 我在2014.03.19添加记录并获得结果今天过了多少天。我认为$ laikotarpas-> d给出了持续时间,但是,当我计算设置30天的限制时。 所以我的主要问题是获得正确的$ liko,但我不知道如何。 我正在使用此代码添加时间(使用PDO):
$q->execute(array($name,
date("Y-m-d H:i:s", time())
);
在我的数据库中,我使用DATETIME。我使用这个PHP从SQL打印该日期:
<?php echo date_format(date_create($data['data']), 'Y-m-d'); ?>
我的方式好吗?如何改善这个?
- - - - - - - - 编辑
我必须使用php5.2
刚刚得到一个想法,它只需几天而忽略了几个月过去了。如何更新它只计算几天的持续时间?
答案 0 :(得分:3)
如果您想找到现在和过去日期之间的差异,请尝试以下方法:
$then = '2014-03-19';
$date = new DateTime($then);
$now = new DateTime('now');
$diff = $date->diff($now);
echo $diff->days . ' days since ' . $then . PHP_EOL; // 58 days since 2014-03-19
$date = strtotime($then);
$now = time();
$diff = $now - $date;
$days = round($diff / 60 / 60 / 24); // convert seconds to days and round off
注意:在了解了有关您的问题的更多信息之后,我强烈建议您根据MySQL而不是PHP中的日期范围过滤结果 - 它会更容易,更经济,并会减少您的影响您并不意味着的数据的潜在风险。 See Cull Larson's answer
答案 1 :(得分:2)
你可以使用这样的查询:
SELECT * FROM myTable WHERE DATE(signupDate) = DATE_SUB(NOW(), INTERVAL 25 DAY);
这将为您提供注册日期为25天的所有结果。如果您在表格中有一个标志,告诉您是否已通知他们,您也可以传递它:
SELECT * FROM myTable WHERE notified=false AND DATE(signupDate) = DATE_SUB(NOW(), INTERVAL 25 DAY);
如果您希望获得25天或更早的记录,则尚未收到通知:
SELECT * FROM myTable WHERE notified=false AND DATE(signupDate) <= DATE_SUB(NOW(), INTERVAL 25 DAY);