изменить дату Php в днях назад

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

Разработчик сказал мне, что я должен изменить этот код, но я совершенно новичок в 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;
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector