【问题标题】:mysql+php to subtract two times and display the differrencemysql+php 减两次并显示差值
【发布时间】:2009-12-12 11:10:59
【问题描述】:

我必须显示 mysql 中的列(reg_time)与当前时间之间的差异,以便最终输出(在某些 php 之后以分钟或秒或小时或天显示) 是:

注册时间:8 小时前

有什么功能可以做到这一点吗? 谢谢

【问题讨论】:

    标签: php datetime mysql


    【解决方案1】:
    //End date is current date
    //$start_date, lets say sep 05 82 : 00:00:00
    
    $seconds_dif = mktime(date("G"),date("i"),date("s"),date("m"),date("d"),date("Y")) - mktime('00','00','00','09','05','1982');
    
    //Difference in seconds is $seconds_dif
    
    //Now only math calculation to figure out months/years..
    
    echo '<br />Years Difference   = '. floor($seconds_dif/365/60/60/24);
    echo '<br />Months Difference  = '. floor($seconds_dif/60/60/24/7/4);
    echo '<br />Weeks Difference   = '. floor($seconds_dif/60/60/24/7);
    echo '<br />Days Difference    = '. floor($seconds_dif/60/60/24);
    echo '<br />Hours Difference   = '. floor($seconds_dif/60/60);
    echo '<br />Minutes Difference = '. floor($seconds_dif/60);
    

    在这里找到:http://www.webhostingtalk.com/showthread.php?t=453668

    您需要为您的数据格式编辑第 3 行代码: mktime('00','00','00','09','05','1982')

    您还需要将此代码包装到一个函数中以便于使用它:

    /**
     * Return string with date time difference between two arguments
     * @param $start_date integer Start date in unix time (seconds from January 1 1970), you can use strtotime('24 November 2003 13:45:54'), for example
     * @param $end_date integer [optional] End date in unix time, by default it equals now
     * @return string
     */
    function getDateTimeDifference($start_date, $end_date = time()) {
        $end_date = mktime(date("G", $end_date),date("i", $end_date),date("s", $end_date),date("m", $end_date),date("d", $end_date),date("Y", $end_date));
        $difference = $end_date - mktime(date("G", $start_date),date("i", $start_date),date("s", $start_date),date("m", $start_date),date("d", $start_date),date("Y", $start_date));
        $years = floor($seconds_dif/365/60/60/24);
        $months = floor($seconds_dif/60/60/24/7/4);
        $weeks = floor($seconds_dif/60/60/24/7);
        $days = floor($seconds_dif/60/60/24);
        $hours = floor($seconds_dif/60/60);
        $minutes = floor($seconds_dif/60);
    
        $ret = 'Difference: ';
        if (!empty($years))
            $ret .= $years . ' years, ';
        if (!empty($months))
            $ret .= $months . ' months, ';
        if (!empty($weeks))
            $ret .= $weeks . ' weeks, ';
        if (!empty($days))
            $ret .= $days . ' days, ';
        if (!empty($hours))
            $ret .= $hours . ' hours, ';
        if (!empty($minutes))
            $ret .= $minutes . 'minutes';
    
        return $ret;
    }
    

    【讨论】:

    • 感谢谢尔盖,还有一件事。这是我存储在数据库中的格式:2007-03-24 16:22:34 如何更改 $seconds_dif 变量以适应它?谢谢..
    • 您可以使用 strtotime() 函数,它读取不同日期和时间格式的字符串并返回给您 unix 时间戳(从 1970 年 1 月 1 日开始的秒数),您也可以将 strtotime() 的返回值date() 函数作为第二个参数,并使用修饰符制作非常灵活的日期时间字符串(请参阅此处的完整列表:php.net/manual/en/function.date.php
    【解决方案2】:

    看看 MySQL 函数 timediff() (4.1.1+) 和 timestampdiff() (5.0+)。
    还有php方法DateTime::diff()(5.3+)

    例如

    SELECT Now(), TIMESTAMPDIFF(HOUR, Now(), '2009-12-12 06:15:34')
    

    刚回来

    "2009-12-12 12:34:00"; “-6”

    在我的机器上。和

    $dt = new DateTime('2008-03-18 06:15:34');
    echo $dt->diff(new DateTime())->format('%y %d %h');
    

    (当前)打印

    1 25 6
    

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多