DateTime diff не работает правильно на странице Wordpress - PullRequest
0 голосов
/ 06 января 2012

Все, у меня есть следующий код PHP, чтобы определить, сколько лет между двумя датами на моей странице Wordpress:

<?php
$date1 = new DateTime("2003-03-24");
$current_date = new DateTime(date("Y-m-d"));
$interval = $date1->diff($current_date);
echo $interval->y;
?>

Я установил плагин Exec-PHP для Wordpress, чтобы отобразить это правильно.Однако, когда я пытаюсь отобразить свою страницу, я получаю следующую ошибку:

Неустранимая ошибка: вызов неопределенного метода DateTime :: diff () в /home/person/test.website.com/wp-content / plugins / exec-php / includes / runtime.php (42): код eval () в строке 7

Как мне заставить это работать должным образом?Спасибо!

Ответы [ 2 ]

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

Я помню этот вопрос некоторое время назад: Как рассчитать разницу между двумя датами с помощью PHP?

С некоторыми небольшими корректировками это выглядит так:

function convert_number($number) { 
    $Gn = floor($number / 1000000);  /* Millions (giga) */ 
    $number -= $Gn * 1000000; 
    $kn = floor($number / 1000);     /* Thousands (kilo) */ 
    $number -= $kn * 1000; 
    $Hn = floor($number / 100);      /* Hundreds (hecto) */ 
    $number -= $Hn * 100; 
    $Dn = floor($number / 10);       /* Tens (deca) */ 
    $n = $number % 10;               /* Ones */ 

    $res = ""; 

    if ($Gn)
        $res .= convert_number($Gn) . " Million"; 
    if ($kn)    { 
        $res .= (empty($res) ? "" : " ") . 
        convert_number($kn) . " Thousand"; 
    } 

    if ($Hn) { 
        $res .= (empty($res) ? "" : " ") . 
        convert_number($Hn) . " Hundred"; 
    } 

    $ones = array("", "One", "Two", "Three", "Four", "Five", "Six","Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen","Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eightteen","Nineteen"); 
    $tens = array("", "", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty","Seventy", "Eigthy", "Ninety"); 

    if ($Dn || $n)  { 
        if (!empty($res))
            $res .= " and "; 

        if ($Dn < 2) 
        $res .= $ones[$Dn * 10 + $n]; 
        else { 
            $res .= $tens[$Dn]; 

            if ($n) 

            $res .= "-" . $ones[$n]; 
        } 
    } 

    if (empty($res)) 
        $res = "zero"; 

    return $res; 
} 

function yearsFromNow ($date) {
    return convert_number(floor(abs(strtotime($date) - strtotime(date("Y-m-d"))) / (365*60*60*24)));
}

echo yearsFromNow("2007-03-24");
echo yearsFromNow("2009-06-26");

Вывод:

4
2

Функция преобразования цифр в буквы с этого сайта: http://www.phpro.org/examples/Convert-Numbers-to-Words.html

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

Как сказано в руководстве , DateTime::Diff (и все функции DateInterval) доступны только в PHP> = 5.3.0.

Вам необходимо установить этоверсия или найти обходной путь, который использует другой набор функций. Здесь - пример того, как сделать это, используя старые функции даты на основе отметки времени.

...