如何计算持续时间?

时间:2014-05-16 01:01:19

标签: php mysql date datetime pdo

我必须在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

刚刚得到一个想法,它只需几天而忽略了几个月过去了。如何更新它只计算几天的持续时间?

2 个答案:

答案 0 :(得分:3)

如果您想找到现在和过去日期之间的差异,请尝试以下方法:

PHP&gt; = 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

$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);