以天为单位更改Php日期

以天为单位更改Php日期,php,date-format,Php,Date Format,我在Joumla上使用了一个组件,它以这种格式返回日期:2个月零6天前。 但我需要像这样显示日期: xx秒前 还是xx分钟前 还是xx小时前 或者xx天前 开发人员告诉我必须修改这段代码,但我对Php完全陌生。我今天一整天都在尝试,连续12个多小时,我所成功完成的就是将我的网站崩溃 有人能帮我吗。如果需要,我愿意授予FTP访问权。代码如下: function dateFormatFromTo($from, $to = null) { $par = JComponentHelper::g

我在Joumla上使用了一个组件,它以这种格式返回日期:2个月零6天前。 但我需要像这样显示日期: xx秒前 还是xx分钟前 还是xx小时前 或者xx天前

开发人员告诉我必须修改这段代码,但我对Php完全陌生。我今天一整天都在尝试,连续12个多小时,我所成功完成的就是将我的网站崩溃

有人能帮我吗。如果需要,我愿意授予FTP访问权。代码如下:

function dateFormatFromTo($from, $to = null)
 {
    $par = JComponentHelper::getParams( 'com_djclassifieds' );      
    $to = (($to === null) ? (time()) : ($to));
    $to = ((is_int($to)) ? ($to) : (strtotime($to)));
    $from = ((is_int($from)) ? ($from) : (strtotime($from)));
    $output = '';     
    $limit = $par->get('date_format_ago_limit','2');
    $units = array
    (
       "COM_DJCLASSIFIEDS_DATE_YEAR"   => 29030400, 
       "COM_DJCLASSIFIEDS_DATE_MONTH"  => 2419200,  
       "COM_DJCLASSIFIEDS_DATE_WEEK"   => 604800,   
       "COM_DJCLASSIFIEDS_DATE_DAY"    => 86400,    
       "COM_DJCLASSIFIEDS_DATE_HOUR"   => 3600,     
       "COM_DJCLASSIFIEDS_DATE_MINUTE" => 60,       
       "COM_DJCLASSIFIEDS_DATE_SECOND" => 1         
    );

    $diff = abs($from - $to);
    $suffix = (($from > $to) ? (JTEXT::_('COM_DJCLASSIFIEDS_DATE_FROM_NOW')) : (JTEXT::_('COM_DJCLASSIFIEDS_DATE_AGO')));

    $i=0;
        foreach($units as $unit => $mult){
            if($diff >= $mult){
                if($i==$limit-1 && $i>0){
                    $output .= " ".JTEXT::_('COM_DJCLASSIFIEDS_DATE_AND').' '.intval($diff / $mult)." ";
                }else{
                    $output .= ", ".intval($diff / $mult)." ";
                }   
                //$and = (($mult != 1) ? ("") : (JTEXT::_('COM_DJCLASSIFIEDS_DATE_AND')));
                //$output .= ", ".$and.intval($diff / $mult)." ";
                if(intval($diff / $mult) == 1){
                    $output .= JTEXT::_($unit); 
                }else{
                    $output .= JTEXT::_($unit."S");
                }

                $diff -= intval($diff / $mult) * $mult;
                $i++;
                if($i==$limit){ break; }            
            }
        }
        $output .= " ".$suffix;
        $output = substr($output, strlen(", "));
  return $output;
 }
因此,如果有人能帮助我,我将不胜感激。如果需要,我可以提供FTP访问权限。 我有PHP5.3

谢谢

这是对课堂的改编

date\u default\u timezone\u set('GMT');
函数getDifference($timestamp,$reference=null){
静态$MINUTE=60;
静态$HOUR=3600;//静态::$MINUTE*60
静态$DAY=86400;//静态::$HOUR*24
静态$WEEK=604800;//静态::$DAY*7
静态$MONTH=2628000;//静态::$YEAR/12
静态$YEAR=31536000;//静态::$DAY*365
$formats=数组(
阵列(0.7*$分钟,%d秒前,'1),
阵列(1.5*$MINUTE,'一分钟前',1),
数组(60*$min、%d分钟前、$min),
阵列(1.5*$HOUR,'一小时前',1),
数组($DAY、%d小时前,$HOUR),
数组(2*$DAY,'昨天',1),
数组(7*$DAY、%d天前、$DAY),
数组(1.5*$WEEK,'一周前',1),
数组($MONTH、%d周前、$WEEK),
数组(1.5*$MONTH,'一个月前',1),
数组($YEAR、%d个月前、$MONTH),
数组(1.5*$YEAR,'一年前',1),
数组(PHP_INT_MAX、%d年前、$YEAR)
);
$futureformats=数组(
阵列(0.7*$MINUTE,'in片刻',-1),
阵列(1.5*$MINUTE,'一分钟内',-1),
数组(60*$MINUTE,'以%d分钟为单位',-$MINUTE),
数组(1.5*$HOUR,'一小时内',-1),
数组($DAY,'in%d小时',-$HOUR),
数组(2*$DAY,'moother',-1),
数组(7*$DAY,'以%d天为单位',-$DAY),
数组(1.5*$WEEK,'一周内',-1),
数组($MONTH,'in%d周',-$WEEK),
数组(1.5*$MONTH,'一个月内',-1),
数组($YEAR,'in%d个月',-$MONTH),
数组(1.5*$YEAR,'in a YEAR',-1),
数组(PHP_INT_MAX,'在%d年内',-$YEAR)
);
如果($reference==null){
$reference=time();
}
$timestamp=($timestamp instanceof DateTime)?$timestamp->getTimestamp():(是数值($timestamp)?(int)$timestamp:strottime($timestamp));
$reference=($reference instanceof DateTime)?$reference->getTimestamp():(是数值($reference)?(int)$reference:strottime($reference));
$delta=$reference-$timestamp;
如果($delta>=0){
foreach($格式为$格式){
如果($delta<$format[0]){
返回sprintf($format[1],round($delta/$format[2]);
}
};
}否则{
foreach($futureformats作为$format){
如果(-$delta<$format[0]){
返回sprintf($format[1],round($delta/$format[2]);
}
};
}
}
//将在52分钟前输出
echo getDifference('2014-01-15 15:24:00','2014-01-15 16:16:12')。PHP_EOL;
//如果没有第二个参数,则输出与当前时间的差值
echo getDifference('2014-01-15 15:24:00')。PHP_EOL;
    date_default_timezone_set('GMT');

    function getDifference($timestamp, $reference = null) {
        static $MINUTE = 60;
        static $HOUR   = 3600;    //static::$MINUTE * 60
        static $DAY    = 86400;   //static::$HOUR * 24
        static $WEEK   = 604800;  //static::$DAY * 7
        static $MONTH  = 2628000; //static::$YEAR / 12
        static $YEAR   = 31536000;//static::$DAY * 365

        $formats = array(
            array(0.7 * $MINUTE, '%d seconds ago', 1),
            array(1.5 * $MINUTE, 'a minute ago',   1),
            array( 60 * $MINUTE, '%d minutes ago', $MINUTE),
            array(1.5 * $HOUR,   'an hour ago',    1),
            array(      $DAY,    '%d hours ago',   $HOUR),
            array(  2 * $DAY,    'yesterday',      1),
            array(  7 * $DAY,    '%d days ago',    $DAY),
            array(1.5 * $WEEK,   'a week ago',     1),
            array(      $MONTH,  '%d weeks ago',   $WEEK),
            array(1.5 * $MONTH,  'a month ago',    1),
            array(      $YEAR,   '%d months ago',  $MONTH),
            array(1.5 * $YEAR,   'a year ago',     1),
            array(PHP_INT_MAX,   '%d years ago',   $YEAR)
        );

        $futureformats = array(
            array(0.7 * $MINUTE, 'in a moment',   -1),
            array(1.5 * $MINUTE, 'in a minute',   -1),
            array( 60 * $MINUTE, 'in %d minutes', -$MINUTE),
            array(1.5 * $HOUR,   'in an hour',    -1),
            array(      $DAY,    'in %d hours',   -$HOUR),
            array(  2 * $DAY,    'tomorrow',      -1),
            array(  7 * $DAY,    'in %d days',    -$DAY),
            array(1.5 * $WEEK,   'in a week',     -1),
            array(      $MONTH,  'in %d weeks',   -$WEEK),
            array(1.5 * $MONTH,  'in a month',    -1),
            array(      $YEAR,   'in %d months',  -$MONTH),
            array(1.5 * $YEAR,   'in a year',     -1),
            array(PHP_INT_MAX,   'in %d years',   -$YEAR)
        );


        if ($reference === null) {
            $reference = time();
        }

        $timestamp = ($timestamp instanceof DateTime) ? $timestamp->getTimestamp() : (is_numeric($timestamp) ? (int)$timestamp : strtotime($timestamp));
        $reference = ($reference instanceof DateTime) ? $reference->getTimestamp() : (is_numeric($reference) ? (int)$reference : strtotime($reference));

        $delta = $reference - $timestamp;

        if ($delta >= 0) {
            foreach ($formats as $format) {
                if ($delta < $format[0]) {
                    return sprintf($format[1], round($delta / $format[2]));
                }
            };
        } else {
            foreach ($futureformats as $format) {
                if (-$delta < $format[0]) {
                    return sprintf($format[1], round($delta / $format[2]));
                }
            };

        }
    }

    // will output 52 minutes ago
    echo getDifference('2014-01-15 15:24:00', '2014-01-15 16:16:12') . PHP_EOL;

    // without second param will output difference with the current time
    echo getDifference('2014-01-15 15:24:00') . PHP_EOL;