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

Тема в разделе "PHP", создана пользователем SERIAL, 6 июл 2011.

Модераторы: latteo
  1. SERIAL

    SERIAL Админ

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

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

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

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    коммент с пхп.нет
    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_datetime());
    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']}сеунд";
     
     
  3. SERIAL

    SERIAL Админ

    Регистр.:
    5 апр 2006
    Сообщения:
    566
    Симпатии:
    144
    вставил это:

    PHP:
    $datedate_diff($timetime());
     
    /**
    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){ 
    -а это куда вставлять?
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Сверху я привёл функцию, её надо обязательно вставлять -
    PHP:
    function date_diff($d1$d2){ 
    ...
       }
    в любое место файла (только вне таких же функций и классов)
     
  5. SERIAL

    SERIAL Админ

    Регистр.:
    5 апр 2006
    Сообщения:
    566
    Симпатии:
    144
    с этой функцией вообще белый лист показывает *_*
     
  6. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    :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($timetime()); 
     
    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
     
  7. SERIAL

    SERIAL Админ

    Регистр.:
    5 апр 2006
    Сообщения:
    566
    Симпатии:
    144
    Хэ, скрипт заработал, но все равно выводит ошибку здесь:
    HTML:
    $interval = $date1->diff($date1);
    пишет:
    Код:
    Fatal error: Call to undefined method DateTime::diff_simple()
    *_*
     
  8. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    просто убери из скрипта нижний вариант после строчки
    PHP:
    // другой вариант для новой пхп
    это для php 5.3
    Перейти по ссылке
     
  9. SERIAL

    SERIAL Админ

    Регистр.:
    5 апр 2006
    Сообщения:
    566
    Симпатии:
    144
    Все равно белый экран :(
     
  10. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    попробуй так
    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($timetime());  
      
    echo 
    "прошло: {$date['year']}лет {$date['month']}месяцев {$date['second']}сеунд<br />";
    по идее точно не должно быть чистой. Если и это не заработает - стукни 606-031-486
     
    SERIAL нравится это.