[英]Calculates difference between two dates in PHP
您好,我有一对夫妇在我的MySQL数据库服务器的帖子,每个帖子的内容信息的一个格式为日期时间日期和时间(例2010-11-26 21点55分09秒)在发表的时候。
因此,我想从具有函数NOW()的SQL服务器中检索实际日期和时间,并计算发布信息的秒数或分钟数或小时数或天数。
我不知道如何创建这个PHP脚本,但我知道肯定已经完成,所以感谢任何帮助。
你可以使用date_diff()函数
http://php.net/manual/en/function.date-diff.php
就像是...
<?php
$now = time();
$then = $posttime;
$diff = date_diff($now,$then);
echo $diff->format('%R%d days'); #change format for different timescales
?>
编辑 -
我实际上使用此功能在我的一个Twitter应用程序上解决了这个问题...
function time_since ( $start )
{
$end = time();
$diff = $end - $start;
$days = floor ( $diff/86400 ); //calculate the days
$diff = $diff - ($days*86400); // subtract the days
$hours = floor ( $diff/3600 ); // calculate the hours
$diff = $diff - ($hours*3600); // subtract the hours
$mins = floor ( $diff/60 ); // calculate the minutes
$diff = $diff - ($mins*60); // subtract the mins
$secs = $diff; // what's left is the seconds;
if ($secs!=0)
{
$secs .= " seconds";
if ($secs=="1 seconds") $secs = "1 second";
}
else $secs = '';
if ($mins!=0)
{
$mins .= " mins ";
if ($mins=="1 mins ") $mins = "1 min ";
$secs = '';
}
else $mins = '';
if ($hours!=0)
{
$hours .= " hours ";
if ($hours=="1 hours ") $hours = "1 hour ";
$secs = '';
}
else $hours = '';
if ($days!=0)
{
$days .= " days ";
if ($days=="1 days ") $days = "1 day ";
$mins = '';
$secs = '';
if ($days == "-1 days ") {
$days = $hours = $mins = '';
$secs = "less than 10 seconds";
}
}
else $days = '';
return "$days $hours $mins $secs ago";
}
您在检查时间的unix时间戳(传递时间)中传递它,并返回各种字符串。
通常,您在查询中执行此类操作,但MySQL对于间隔不是很好(使用PostgreSQL会很容易)。 您可以将其转换为unix时间戳,然后它将给出两个日期之间的秒数:
SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(your_datetime_column);
我想过DATEDIFF,但它只返回两个日期之间的天数。
例如,您可以使用DateTime类在PHP中执行此操作:
$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_diff()
函数,如果不是,则可以使用各种方法。 如其他海报所示。 如果你想知道分成“hours:mins:secs”层次结构的时间,那么MySQL中最快的方法就是使用TIMEDIFF()函数 。
SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00');
如果你想要它作为秒,使用MySQL或PHP中的unix时间戳功能,你可以使用strtotime()
快速将MySQL日期转换为PHP。
SQL Query中可以提供一个简单的解决方案:
SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(post_date) AS seconds_ago FROM posts
这里的文档: MySQL Ref
我实际上需要自己在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
?>
提醒一下显而易见:如果只需要整数substr($interval->format('%R%a days'),1)
你也可以使用substr($interval->format('%R%a days'),1)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.