2016-05-27 11 views
-1

Здесь я пишу одну функцию, из этого кода не работает должным образом, значение $ joiningdate 1 год готово означает, что оно будет показано 01 лет назад, но предположим, что 10 месяцев только закончились, значит, я хочу показать 10 месяцев назад, то же самое в течение нескольких дней, я думаю, что если состояние моего неправильно, здесьКак показать значение за 2 месяца назад

echo $since_start->format('%Y years %m Months %a days %h hours %i minuts %s seconds');//00 years 2 Months 61 days 13 hours 44 minuts 24 seconds. 

я получу правильного значение

function timeAgo($logintime) 
 
{ 
 
date_default_timezone_set('UTC'); 
 
date_default_timezone_set('Asia/Kolkata'); 
 
$start_date = new DateTime($logintime); 
 
$since_start = $start_date->diff(new DateTime(date("Y-m-d h:i:s"))); 
 
if(intval($since_start->format('%Y')) >= 1){ 
 
    echo $year = $since_start->format('%Y years ago'); 
 
} 
 
else if(intval($since_start->format('%m')) >= 12){ 
 
    echo $months = $since_start->format('%m month ago'); 
 
} 
 
else if(intval($since_start->format('%a')) >= 1){ 
 
    echo $days = $since_start->format('%a days ago'); 
 
} 
 
else if(intval($since_start->format('%h')) >= 1){ 
 
    echo $hourss = $since_start->format('%h hours ago');  
 
} 
 
else if(intval($since_start->format('%i')) >= 1){ 
 
    echo $min = $since_start->format('%i minuts ago'); 
 
} 
 
else if(intval($since_start->format('%s')) >= 1){ 
 
    echo $min = $since_start->format('%s seconds ago'); 
 
} 
 
    
 
}

+1

У вас есть много, если х, но ни одна из этих переменных не определены ?! Кроме того, возможно, вы захотите изменить текст в каждом случае, а не каждый год? – Naruto

+0

Как @Naruto прокомментировал, что ваши переменные выходят за рамки функции, например, поскольку вы только определили '$ joiningdate', а ваши переменные' $ Y, $ m, $ h' выходят за рамки функции –

+0

Теперь как можно делать? –

ответ

0

Converting timestamp to time ago in PHP e.g 1 day ago, 2 days ago...

function time_elapsed_string($ptime) 

{ 
$etime = time() - $ptime; 

if ($etime < 1) 
{ 
    return '0 seconds'; 
} 

$a = array(365 * 24 * 60 * 60 => 'year', 
      30 * 24 * 60 * 60 => 'month', 
        24 * 60 * 60 => 'day', 
         60 * 60 => 'hour', 
          60 => 'minute', 
          1 => 'second' 
      ); 
$a_plural = array('year' => 'years', 
        'month' => 'months', 
        'day' => 'days', 
        'hour' => 'hours', 
        'minute' => 'minutes', 
        'second' => 'seconds' 
      ); 

foreach ($a as $secs => $str) 
{ 
    $d = $etime/$secs; 
    if ($d >= 1) 
    { 
     $r = round($d); 
     return $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ago'; 
    } 
    } 
} 

или с вашим кодом, но вы sould изменить его

 <?php 
function joining_date($joiningdate){ 
    date_default_timezone_set('UTC'); 
    date_default_timezone_set('Asia/Kolkata'); 
    $start_date = new DateTime($joiningdate);//$joiningdate =2016-03-27 
    $since_start = $start_date->diff(new DateTime(date("Y-m-d H:i:s"))); 
    echo $since_start->format('%Y years %m Months %a days %h hours %i minuts %s seconds');//00 years 2 Months 61 days 13 hours 44 minuts 24 seconds 

    if(intval($since_start->format('%Y')) >= 1){ 
     echo $year = $since_start->format('%Y years ago'); 
    } 
    else if(intval($since_start->format('%m')) >= 1){ 
     echo $months = $since_start->format('%m month ago'); 
    } 
    else if(intval($since_start->format('%a')) >= 1){ 
     echo $days = $since_start->format('%a days ago'); 
    } 
    else if(intval($since_start->format('%g')) >= 1){ 
     echo $hourss = $since_start->format('%g hours ago');  
    } 
    else if(intval($since_start->format('%i')) >= 1){ 
     echo $min = $since_start->format('%i minuts ago'); 
    } 
    else if(intval($since_start->format('%s')) >= 1){ 
     echo $min = $since_start->format('%s seconds ago'); 
    } 
    } 
    joining_date('2016-05-27 02:40:00'); 
?> 
+0

$ ptime = 2016-03-27; но он показывает 36 лет назад, не работает должным образом. –

+0

use strtotime ($ ptime) –

+0

это отлично работает для меня –