2016-09-06 4 views
1

Когда мой код перемещается с локального сервера на сервер жить он показывает ошибку, как это:Фатальная ошибка: Вызов неопределенной метода DateTime :: Diff()

Fatal error: Call to undefined method DateTime::diff()

Код:

<?php  
    date_default_timezone_set('Asia/Calcutta'); 
    $sFinalDate = date('Y-m-d', strtotime($sDate)); 
    $sNow   = new DateTime(); 
    $iRemain  = new DateTime($sFinalDate.$sTime); 
    $iInterval = $iRemain->diff($sNow); 
    $sTimeCounter = $iInterval->format("%h: %i :%s "); 
    $sCalculate = $iInterval->format("%a:%h:%i"); 
?> 
+1

Мой локальный сервер: 4.5.5.1 @PaulCrovella – Chinou

+0

И информация о текущей версии: 4.3.8 – Chinou

+0

http://stackoverflow.com/questions/4033224/what-can-use-use- for-datetimediff-for-php-5-2 см. это – Ish

ответ

2

Though I found a number of people who ran into the issue of 5.2 and lower not supporting this function, I was unable to find any solid examples to get around it. Therefore I hope this can help some others:

<?php 
function get_timespan_string($older, $newer) { 
    $Y1 = $older->format('Y'); 
    $Y2 = $newer->format('Y'); 
    $Y = $Y2 - $Y1; 

    $m1 = $older->format('m'); 
    $m2 = $newer->format('m'); 
    $m = $m2 - $m1; 

    $d1 = $older->format('d'); 
    $d2 = $newer->format('d'); 
    $d = $d2 - $d1; 

    $H1 = $older->format('H'); 
    $H2 = $newer->format('H'); 
    $H = $H2 - $H1; 

    $i1 = $older->format('i'); 
    $i2 = $newer->format('i'); 
    $i = $i2 - $i1; 

    $s1 = $older->format('s'); 
    $s2 = $newer->format('s'); 
    $s = $s2 - $s1; 

    if($s < 0) { 
    $i = $i -1; 
    $s = $s + 60; 
    } 
    if($i < 0) { 
    $H = $H - 1; 
    $i = $i + 60; 
    } 
    if($H < 0) { 
    $d = $d - 1; 
    $H = $H + 24; 
    } 
    if($d < 0) { 
    $m = $m - 1; 
    $d = $d + get_days_for_previous_month($m2, $Y2); 
    } 
    if($m < 0) { 
    $Y = $Y - 1; 
    $m = $m + 12; 
    } 
    $timespan_string = create_timespan_string($Y, $m, $d, $H, $i, $s); 
    return $timespan_string; 
} 

function get_days_for_previous_month($current_month, $current_year) { 
    $previous_month = $current_month - 1; 
    if($current_month == 1) { 
    $current_year = $current_year - 1; //going from January to previous December 
    $previous_month = 12; 
    } 
    if($previous_month == 11 || $previous_month == 9 || $previous_month == 6 || $previous_month == 4) { 
    return 30; 
    } 
    else if($previous_month == 2) { 
    if(($current_year % 4) == 0) { //remainder 0 for leap years 
     return 29; 
    } 
    else { 
     return 28; 
    } 
    } 
    else { 
    return 31; 
    } 
} 

function create_timespan_string($Y, $m, $d, $H, $i, $s) 
{ 
    $timespan_string = ''; 
    $found_first_diff = false; 
    if($Y >= 1) { 
    $found_first_diff = true; 
    $timespan_string .= pluralize($Y, 'year').' '; 
    } 
    if($m >= 1 || $found_first_diff) { 
    $found_first_diff = true; 
    $timespan_string .= pluralize($m, 'month').' '; 
    } 
    if($d >= 1 || $found_first_diff) { 
    $found_first_diff = true; 
    $timespan_string .= pluralize($d, 'day').' '; 
    } 
    if($H >= 1 || $found_first_diff) { 
    $found_first_diff = true; 
    $timespan_string .= pluralize($H, 'hour').' '; 
    } 
    if($i >= 1 || $found_first_diff) { 
    $found_first_diff = true; 
    $timespan_string .= pluralize($i, 'minute').' '; 
    } 
    if($found_first_diff) { 
    $timespan_string .= 'and '; 
    } 
    $timespan_string .= pluralize($s, 'second'); 
    return $timespan_string; 
} 

function pluralize($count, $text) 
{ 
    return $count . (($count == 1) ? (" $text") : (" ${text}s")); 
} 
?> 

источник http://php.net/manual/en/function.date-diff.php если вы используете PHP 5.3, то там будет еще один вопрос , работающий над примером на php> = 5.3