2010-11-27 161 views
6

嗨,我在MySql数据库服务器中有几个帖子,每个帖子中的信息内容之一是格式为的日期和时间datetime(例如2010-11- 26 21:55:09)发帖时。计算PHP中两个日期之间的差异

因此,我想用NOW()函数从SQL服务器中检索实际的日期和时间,并计算在信息发布后多少秒或几分钟或几小时或几天。

我不知道如何创建这个PHP脚本,但我知道肯定是已经做好了,所以谢谢你的帮助。

回答

4

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

SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00'); 

如果你想把它当作秒,使用MySQL或PHP中的Unix时间戳功能,您可以将MySQL的日期,以快速PHP中使用strtotime()

5

您可以使用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时间戳(发布时间),并返回各种字符串。

+2

你先生,只是我的一天。我一直需要这样的一段时间,现在我实际上可以计算两个时间戳之间的分钟数,完全在PHP中。如果有人感兴趣,或者想让它更高效,我已经把它变成了GIST:https://gist.github.com/4347159 – 2012-12-20 17:49:44

+0

我不认为date_diff需要time()作为输入。它需要DateTime对象。 所以你需要做一些事情: `$ date1 = date_create(“2013-03-15”);` `$ date2 = date_create(“2013-12-12”);` `$ diff = date_diff($ date1,$ date2);` – 2016-12-19 16:11:56

0

一个简单的解决方案是可行的SQL查询中:

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

文档浏览:MySQL Ref

4

通常情况下,你做这种事情的查询,但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查询。

相关问题