首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中计算两个日期之间的差异

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

Stack Overflow用户
提问于 2010-11-27 10:37:23
回答 5查看 14.1K关注 0票数 6

您好,我在我的MySql数据库服务器中有几个帖子,每个帖子中的一个信息内容是格式为datetime (Ex.2010-11-26 21:55:09)发布帖子时。

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-27 10:50:06

正如billythekid所说,如果你正在使用PHP5.3+,你可以使用date_diff()函数,如果你没有使用,那么有多种方法。正如其他海报所显示的那样。如果你想知道“时:分:秒”层次结构中的时间,在MySQL中最快的方法就是使用TIMEDIFF() function

代码语言:javascript
复制
SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00');

如果您想要以秒为单位,可以在MySQL或PHP中使用unix时间戳特性,您可以使用strtotime()快速将MySQL日期转换为PHP。

票数 4
EN

Stack Overflow用户

发布于 2010-11-27 10:43:43

您可以使用date_diff()函数

http://php.net/manual/en/function.date-diff.php

就像..。

代码语言:javascript
复制
<?php 
$now = time();
$then = $posttime;
$diff = date_diff($now,$then);
echo $diff->format('%R%d days'); #change format for different timescales
?>

编辑--

我实际上在我的一个twitter应用程序上使用这个函数解决了这个问题……

代码语言:javascript
复制
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";
}

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

票数 5
EN

Stack Overflow用户

发布于 2010-11-27 10:45:53

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

代码语言:javascript
复制
SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(your_datetime_column);

我考虑过DATEDIFF,但它只返回两个日期之间的天数。

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

代码语言:javascript
复制
$date1 = new DateTime();
$date2 = new Datetime('2010-11-26 12:00:00');

var_dump($date1->diff($date2));

(如果您不是OOP的粉丝,有一种过程性的方法可以做到这一点。)

如果我不能在RDBMS上做到这一点,这绝对是我会使用的解决方案。DateTime::diff返回一个DateInterval对象,该对象包含两个日期之间的秒数、分钟数、小时数、天数等。

您也可以在PHP中使用时间戳来完成此操作:

代码语言:javascript
复制
$num_sec = time() - strtotime('2010-11-26 12:00:00');

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4289828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档