Корректировка кода, предназначенного для PHP 5.3, чтобы соответствовать PHP 5.2.17 - PullRequest
0 голосов
/ 06 января 2012

Мой сервер продолжает возвращать ошибку, потому что функция не поддерживается. Недавно я обнаружил, что не могу перейти на PHP 5.3, пока Zend Optimizer его не поддержит; в настоящее время наши администраторы сервера хотят придерживаться стабильной версии ZO для серверной среды.

Можете ли вы порекомендовать какие-либо корректировки, которые я могу внести в код?

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

Это код:

$today = date('l');

    if($today == 'Wednesday'){
        $min = date('d/m/Y', strtotime('0 days'));
        $max = date('d/m/Y', strtotime('+6 days'));
    }else if($today == 'Thursday'){
        $min = date('d/m/Y', strtotime('-1 days'));
        $max = date('d/m/Y', strtotime('+5 days'));
    }else if($today == 'Friday'){
        $min = date('d/m/Y', strtotime('-2 days'));
        $max = date('d/m/Y', strtotime('+4 days'));
    }else if($today == 'Saturday'){
        $min = date('d/m/Y', strtotime('-3 days'));
        $max = date('d/m/Y', strtotime('+3 days'));
    }else if($today == 'Sunday'){
        $min = date('d/m/Y', strtotime('-4 days'));
        $max = date('d/m/Y', strtotime('+2 days'));
    }else if($today == 'Monday'){
        $min = date('d/m/Y', strtotime('-5 days'));
        $max = date('d/m/Y', strtotime('+1 days'));
    }else if($today == 'Tuesday'){
        $min = date('d/m/Y', strtotime('-6 days'));
        $max = date('d/m/Y', strtotime('0 days'));
    }

    // check database for necessary updates

$update = mysql_query("SELECT * FROM rent WHERE colour='#3C0'");
while($row_update = mysql_fetch_array( $update )) {
    $datetime_lower   = DateTime::createFromFormat('d/m/Y', $min);
    $datetime_upper   = DateTime::createFromFormat('d/m/Y', $max);
    $datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', $row_update['pDate']);
    if ($datetime_lower < $datetime_compare && $datetime_upper > $datetime_compare) {
        // date is between do nothing
    } else {
        // date is not between so update
        $update_result = mysql_query("UPDATE rent SET colour='#F0F0F0' WHERE id=" . $row_update['id'] . " && colour='#3C0'");
        mysql_close($update_result);
    }
}

Как мне решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Вы можете заменить этот большой блок if / elseif следующим:

$today = date("w");
$min_mod = ($today < 3) ? -4 - $today : 3 - $today;
$max_mod = ($today < 3) ? 2 - $today : 9 - $today;
$min = strtotime("today 00:00:00 -".$min_mod." days");
$max = strtotime("today 23:59:59 +".$max_mod." days");

, тогда ниже в цикле SQL:

//$datetime_lower   = DateTime::createFromFormat('d/m/Y', $min);
//$datetime_upper   = DateTime::createFromFormat('d/m/Y', $max);
$compare = strtotime($row_update['pDate']);
if ($min < $compare && $max > $compare) {
    // date is between do nothing
} else {
    // code snipped
}
0 голосов
/ 06 января 2012

PHP <= 5.3 больше не поддерживается, поэтому постарайтесь обратиться к администраторам за обновлением (пусть выбирают - стабильный Zend Optimizer или стабильный интерпретатор PHP - что важнее?) </p>

0 голосов
/ 06 января 2012

Попробуйте заменить DateTime::createFromFormat('d/m/Y', $xxx); на date('d/m/Y', strtotime($xxx));.

...