2014-01-16 6 views
1

Я использую компонент на Joumla, который возвращает даты в этом формате: 2 месяца и 6 дней назад. Но мне нужна дата, которая будет отображаться следующим образом: xx секунд назад или xx минут назад или xx часов назад или xx дней назад.изменить Php дате по дням

Разработчик сказал мне, что мне нужно изменить этот код, но я совершенно не знаком с 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-доступ. У меня есть Php 5,3

Спасибо

ответ

1

Это адаптация Date_HumanDiff класса

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; 
Смежные вопросы