Php 如何显示2个月前的价值

Php 如何显示2个月前的价值,php,php-5.2,Php,Php 5.2,这里我写了一个函数,根据这个代码,不能正常工作,$joiningdate值1年完成意味着,它将显示01年前,但假设10个月只完成意味着我想显示10个月前,相同的天,我想如果我的条件是错误的,这里 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. 我将得

这里我写了一个函数,根据这个代码,不能正常工作,$joiningdate值1年完成意味着,它将显示01年前,但假设10个月只完成意味着我想显示10个月前,相同的天,我想如果我的条件是错误的,这里

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)
{
日期\默认\时区\设置('UTC');
日期默认时区设置(“亚洲/加尔各答”);
$start\u date=新日期时间($logintime);
$since_start=$start_date->diff(新日期时间(日期(“Y-m-d h:i:s”));
if(intval($since_start->format('%Y'))>=1){
echo$year=$since_start->format(“%Y年前”);
}
else if(intval($since_start->format('%m'))>=12){
echo$months=$since_start->format(“%m个月前”);
}
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小时前”);
}
else if(intval($since_start->format('%i'))>=1){
echo$min=$since_start->format(“%i分钟前”);
}
else if(intval($since_start->format('%s'))>=1){
echo$min=$since_start->format(“%s秒前”);
}
}

函数时间\u经过\u字符串($ptime)
{
$etime=time()-$ptime;
如果($etime<1)
{
返回“0秒”;
}
$a=数组(365*24*60*60=>“年”,
30*24*60*60=>“月”,
24*60*60=>“天”,
60*60=>“小时”,
60=>“分钟”,
1=>“秒”
);
$a_复数=数组('year'=>'years',
“月”=>“月”,
“天”=>“天”,
“小时”=>“小时”,
“分钟”=>“分钟”,
“秒”=>“秒”
);
foreach($a作为$secs=>$str)
{
$d=$etime/$secs;
如果($d>=1)
{
$r=四舍五入($d);
返回$r.''($r>1?$a_复数[$str]:$str)。'ago';
}
}
}
或者使用你的代码,但你应该修改它

        <?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');
?>


您有很多if,但这些变量都没有定义?!此外,您可能希望在every if而不是year every where中更改文本?正如@Naruto评论的那样,您的变量超出了函数范围,就像您只定义了
$joiningdate
一样,并且您的变量
$Y,$m,$h
超出了函数范围$ptime=2016-03-27;但它显示36年前,工作不正常使用strotime($ptime)DateTime比手工计算要好得多,而且这样做不是100%正确(想想2月和DST额外的一天吧)@火影忍者告诉我如何使用DateTime:)我总是使用jquery插件dothis@B.Kevin代码有问题。。他唯一的问题是不知道如何处理结果。。。
        <?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');
?>