我必须在 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 < 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 .
关于php - 如何计算以天为单位的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691081/