我必须在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
刚刚有了一个想法,只需要几天,忽略了过去的几个月。如何更新,计数持续时间只在天?
如果您想查找现在和过去某个日期之间的差异,请尝试这样做:
PHP>= 5.2.0
$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
<标题> PHP & lt;5.2.0 h1> p>注意:在对你的问题有了更多的了解之后,我强烈建议你在MySQL中而不是PHP中根据日期范围过滤你的结果——这将更容易,更经济,并将减少你影响数据的潜在风险。请看Cull Larson的回答
标题>您可以使用这样的查询:
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);