在PHP中计算两个日期之间的差异

在PHP中计算两个日期之间的差异,php,mysql,Php,Mysql,大家好,我在MySql数据库服务器上有几篇文章,每篇文章中的信息内容之一是文章发表时的日期和时间,格式为datetime(例如2010-11-26 21:55:09) 因此,我想使用函数NOW()从SQL server检索实际日期和时间,并计算发布信息的时间是多少秒、分钟、小时或天 我不知道如何创建这个php脚本,但我知道它已经准备好了,所以感谢您的帮助。您可以使用date\u diff()函数 类似于 <?php $now = time(); $then = $posttime; $

大家好,我在MySql数据库服务器上有几篇文章,每篇文章中的信息内容之一是文章发表时的日期和时间,格式为datetime(例如2010-11-26 21:55:09)

因此,我想使用函数NOW()从SQL server检索实际日期和时间,并计算发布信息的时间是多少秒、分钟、小时或天


我不知道如何创建这个php脚本,但我知道它已经准备好了,所以感谢您的帮助。

您可以使用date\u diff()函数

类似于

<?php 
$now = time();
$then = $posttime;
$diff = date_diff($now,$then);
echo $diff->format('%R%d days'); #change format for different timescales
?>

您将其传递给检查时间(post时间)的unix时间戳,它将返回各种字符串。

可以从SQL查询中找到一个简单的解决方案:

SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(post_date) AS seconds_ago FROM posts

这里的文档:

通常,您可以在查询中执行这类操作,但MySQL在间隔方面不是很好(使用PostgreSQL很容易)。您可以将其转换为unix时间戳,然后它将给出两个日期之间的秒数:

SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(your_datetime_column);
我考虑过DATEDIFF,但它只返回两个日期之间的天数

例如,您可以在PHP中使用DateTime类执行此操作:

$date1 = new DateTime();
$date2 = new Datetime('2010-11-26 12:00:00');

var_dump($date1->diff($date2));
(如果你不喜欢OOP,有一种程序化的方法可以做到这一点。)
如果我不能使用RDBMS,这绝对是我会使用的解决方案。DateTime::diff返回一个DateInterval对象,其中包含两个日期之间的秒数、分钟数、小时数、天数等

您还可以使用PHP中的时间戳:

$num_sec = time() - strtotime('2010-11-26 12:00:00');

这将返回与SQL查询相同的内容。

正如billythekid所说,如果使用PHP5.3+,则可以使用
date\u diff()
函数,如果不使用,则有多种方法。如其他海报所示。如果您想知道划分为“hours:mins:secs”层次结构的时间,MySQL中最快的方法是使用


如果您希望它是秒,那么可以使用MySQL或PHP中的unix时间戳功能,您可以使用
strotime()

将MySQL日期快速转换为PHP。实际上,我自己也需要在PHP中这样做,尽管billythekid的帖子方向正确,但它没有做到。我已经最小化了代码,但应该清楚的是,第二个参数来自一个列类型为
DATETIME
的数据库

<?php
$interval = date_diff(date_create(date('Y-m-d H:i:s')), date_create($row1['date']));
echo $interval->format('%R%a days');

//Database: 2019-02-22
//PHP's date: 2018-07-07
//Result: +306 days
?>

需要注意的一件事是DateTime->diff是一个5.3+功能,因此如果您使用的是5.2.x,它将不适用于您,您必须使用SQL或将时间转换为PHP中的unix时间戳并在那里执行。先生,您刚刚度过了我的一天。我需要这样的东西已经有一段时间了,现在我可以完全用PHP计算两个时间戳之间的分钟数。如果有人感兴趣,或者想让它更有效率,我已经把它作为一个要点:我不认为date_diff需要时间()作为输入。它需要DateTime对象。因此,您需要执行如下操作:
$date1=date\u create(“2013-03-15”)
$date2=创建日期(“2013-12-12”)
$diff=date\u diff($date1,$date2)
SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00');
<?php
$interval = date_diff(date_create(date('Y-m-d H:i:s')), date_create($row1['date']));
echo $interval->format('%R%a days');

//Database: 2019-02-22
//PHP's date: 2018-07-07
//Result: +306 days
?>