Определение Time Ago

SERIAL

Админ
Регистрация
5 Апр 2006
Сообщения
557
Реакции
193
Помогите вывести дату с момента написания поста.
Например: Прошло 2 года, 3 месяца и 4 дня с момента создания поста.

Всякие мануалы в интернетах не помогли и нечего толкового не дали.
Поиск по форуму нечего не дал.

Нормальная дата создания поста выводится так:
PHP:
<?=date ('z.d.m.Y H:i',$time);?>

Заранее благодарен.
 
коммент с пхп.нет
PHP:
function date_diff($d1, $d2){
/* compares two timestamps and returns array with differencies (year, month, day, hour, minute, second)
*/
  //check higher timestamp and switch if neccessary
  if ($d1 < $d2){
    $temp = $d2;
    $d2 = $d1;
    $d1 = $temp;
  }
  else {
    $temp = $d1; //temp can be used for day count if required
  }
  $d1 = date_parse(date("Y-m-d H:i:s",$d1));
  $d2 = date_parse(date("Y-m-d H:i:s",$d2));
  //seconds
  if ($d1['second'] >= $d2['second']){
    $diff['second'] = $d1['second'] - $d2['second'];
  }
  else {
    $d1['minute']--;
    $diff['second'] = 60-$d2['second']+$d1['second'];
  }
  //minutes
  if ($d1['minute'] >= $d2['minute']){
    $diff['minute'] = $d1['minute'] - $d2['minute'];
  }
  else {
    $d1['hour']--;
    $diff['minute'] = 60-$d2['minute']+$d1['minute'];
  }
  //hours
  if ($d1['hour'] >= $d2['hour']){
    $diff['hour'] = $d1['hour'] - $d2['hour'];
  }
  else {
    $d1['day']--;
    $diff['hour'] = 24-$d2['hour']+$d1['hour'];
  }
  //days
  if ($d1['day'] >= $d2['day']){
    $diff['day'] = $d1['day'] - $d2['day'];
  }
  else {
    $d1['month']--;
    $diff['day'] = date("t",$temp)-$d2['day']+$d1['day'];
  }
  //months
  if ($d1['month'] >= $d2['month']){
    $diff['month'] = $d1['month'] - $d2['month'];
  }
  else {
    $d1['year']--;
    $diff['month'] = 12-$d2['month']+$d1['month'];
  }
  //years
  $diff['year'] = $d1['year'] - $d2['year'];
  return $diff;   
}
$born_date = mktime(6,30,0,7,24,2008);
$date_diff_array = date_diff($born_date, time());
print_r($date_diff_array);
у тебя

HTML:
$date= date_diff($time, time());
 /**
Array
(
    [second] => 1
    [minute] => 51
    [hour] => 12
    [day] => 13
    [month] => 11
    [year] => 2
)
 */
echo "прошло: {$date['year']}лет {$date['month']}месяцев {$date['second']}сеунд";
 
вставил это:

PHP:
$date= date_diff($time, time());
 /**
Array
(
    [second] => 1
    [minute] => 51
    [hour] => 12
    [day] => 13
    [month] => 11
    [year] => 2
)
 */
echo "прошло: {$date['year']}лет {$date['month']}месяцев {$date['second']}сеунд";

в результате чего появилось вот это:

Fatal error: Call to undefined function date_diff() in​


PHP:
function date_diff($d1, $d2){
-а это куда вставлять?
 
Сверху я привёл функцию, её надо обязательно вставлять -
PHP:
function date_diff($d1, $d2){ 
...
   }
в любое место файла (только вне таких же функций и классов)
 
с этой функцией вообще белый лист показывает *_*
 
:imsorry: прошу прощенья) надо переименовать date_diff в новых версиях пхп она уже сделана. Вот новый пример

PHP:
function date_diff_simple($d1, $d2){ 

  //check higher timestamp and switch if neccessary 
  if ($d1 < $d2){ 
    $temp = $d2; 
    $d2 = $d1; 
    $d1 = $temp; 
  } 
  else { 
    $temp = $d1; //temp can be used for day count if required 
  } 
  $d1 = date_parse(date("Y-m-d H:i:s",$d1)); 
  $d2 = date_parse(date("Y-m-d H:i:s",$d2)); 
  //seconds 
  if ($d1['second'] >= $d2['second']){ 
    $diff['second'] = $d1['second'] - $d2['second']; 
  } 
  else { 
    $d1['minute']--; 
    $diff['second'] = 60-$d2['second']+$d1['second']; 
  } 
  //minutes 
  if ($d1['minute'] >= $d2['minute']){ 
    $diff['minute'] = $d1['minute'] - $d2['minute']; 
  } 
  else { 
    $d1['hour']--; 
    $diff['minute'] = 60-$d2['minute']+$d1['minute']; 
  } 
  //hours 
  if ($d1['hour'] >= $d2['hour']){ 
    $diff['hour'] = $d1['hour'] - $d2['hour']; 
  } 
  else { 
    $d1['day']--; 
    $diff['hour'] = 24-$d2['hour']+$d1['hour']; 
  } 
  //days 
  if ($d1['day'] >= $d2['day']){ 
    $diff['day'] = $d1['day'] - $d2['day']; 
  } 
  else { 
    $d1['month']--; 
    $diff['day'] = date("t",$temp)-$d2['day']+$d1['day']; 
  } 
  //months 
  if ($d1['month'] >= $d2['month']){ 
    $diff['month'] = $d1['month'] - $d2['month']; 
  } 
  else { 
    $d1['year']--; 
    $diff['month'] = 12-$d2['month']+$d1['month']; 
  } 
  //years 
  $diff['year'] = $d1['year'] - $d2['year']; 
  return $diff;    
} 

$time = mktime(6,30,0,7,24,2008); 

$date = date_diff_simple($time, time()); 
 
echo "прошло: {$date['year']}лет {$date['month']}месяцев {$date['second']}сеунд<br />";
// другой вариант для новой пхп
// PHP 5 >= 5.3.0) 
   $date1 = new DateTime('@'.$time);
    $date2 = new DateTime("now");
    $interval = $date1->diff($date2);
 echo $interval->format('%y лет %m месяцев %s секунд ');

date_diff_simple - будет работать для всех. а нижний пример только для >= 5.3.0
 
Хэ, скрипт заработал, но все равно выводит ошибку здесь:
HTML:
$interval = $date1->diff($date1);
пишет:
Код:
Fatal error: Call to undefined method DateTime::diff_simple()
*_*
 
Хэ, скрипт заработал, но все равно выводит ошибку здесь:
HTML:
$interval = $date1->diff($date1);
пишет:
Код:
Fatal error: Call to undefined method DateTime::diff_simple()
*_*
просто убери из скрипта нижний вариант после строчки
PHP:
// другой вариант для новой пхп
это для php 5.3
 
Все равно белый экран :(
 
попробуй так
PHP:
error_reporting(E_ALL);
ini_set('display_errors','On');
function date_diff_simple($d1, $d2){  

  //check higher timestamp and switch if neccessary  
  if ($d1 < $d2){  
    $temp = $d2;  
    $d2 = $d1;  
    $d1 = $temp;  
  }  
  else {  
    $temp = $d1; //temp can be used for day count if required  
  }  
  $d1 = date_parse(date("Y-m-d H:i:s",$d1));  
  $d2 = date_parse(date("Y-m-d H:i:s",$d2));  
  //seconds  
  if ($d1['second'] >= $d2['second']){  
    $diff['second'] = $d1['second'] - $d2['second'];  
  }  
  else {  
    $d1['minute']--;  
    $diff['second'] = 60-$d2['second']+$d1['second'];  
  }  
  //minutes  
  if ($d1['minute'] >= $d2['minute']){  
    $diff['minute'] = $d1['minute'] - $d2['minute'];  
  }  
  else {  
    $d1['hour']--;  
    $diff['minute'] = 60-$d2['minute']+$d1['minute'];  
  }  
  //hours  
  if ($d1['hour'] >= $d2['hour']){  
    $diff['hour'] = $d1['hour'] - $d2['hour'];  
  }  
  else {  
    $d1['day']--;  
    $diff['hour'] = 24-$d2['hour']+$d1['hour'];  
  }  
  //days  
  if ($d1['day'] >= $d2['day']){  
    $diff['day'] = $d1['day'] - $d2['day'];  
  }  
  else {  
    $d1['month']--;  
    $diff['day'] = date("t",$temp)-$d2['day']+$d1['day'];  
  }  
  //months  
  if ($d1['month'] >= $d2['month']){  
    $diff['month'] = $d1['month'] - $d2['month'];  
  }  
  else {  
    $d1['year']--;  
    $diff['month'] = 12-$d2['month']+$d1['month'];  
  }  
  //years  
  $diff['year'] = $d1['year'] - $d2['year'];  
  return $diff;     
}  

$time = mktime(6,30,0,7,24,2008);  

$date = date_diff_simple($time, time());  
  
echo "прошло: {$date['year']}лет {$date['month']}месяцев {$date['second']}сеунд<br />";
по идее точно не должно быть чистой. Если и это не заработает - стукни
 
Назад
Сверху