php - 如何计算以天为单位的持续时间?

标签 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

只是有了一个想法,它只需要几天,并且忽略了过去的几个月。如何更新它以仅以天为单位计算持续时间?

最佳答案

如果你想找出现在和过去某个日期之间的区别,试试这样:

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/

相关文章:

php - Laravel 5 图片上传不正确的数据库路径

php - 沙发基地 php windows 客户端

mysql - 在Concat mysql中选择

java - hibernate 异常 : Duplicate entry for key 'PRIMARY'

javascript - 质量 JavaScript : date-triggered logic

php - strtotime() 被认为是有害的?

php - 使用类访问时未捕获 PDO 异常

php - 并且在子句中不起作用

mysql - 如果我有重复的 'WHERE' 字段,如何更新 MySQL 条目?

php - 从字符串中提取启发式(模糊)日期?