PHP `DateTime::days` возвращает мусор?

PHP-класс DateInterval имеет свойство «дни». Согласно руководству, он возвращает «Общее количество дней, в течение которых интервал охватывает. Если это неизвестно, количество дней будет FALSE».

В моем случае код:

$d = new DateInterval('P1Y'); 
echo $d->days;

возвращает -99999

и такой код

$a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
$b = DateTime::createFromFormat("d.m.Y", "03.01.2010");

$d = $b->diff($a);
echo $d->days;

возвращает 6015

Я что-то неправильно понял?


person 30thh    schedule 08.02.2011    source источник


Ответы (3)


DateInterval содержит ошибки на платформе Windows. См. ошибку № 51183. Официальный ответ, похоже, звучит так: «Пока вместо этого используйте сборки VC9».

person meze    schedule 08.02.2011
comment
Об ошибке сообщили год назад, и они пометили ее как не исправимую, потому что это не то, что мы можем легко исправить. Они больны!? - person 30thh; 08.02.2011

Я просто запускаю ваши примеры, и они должны работать. В частности, я получил:

    $d = new DateInterval('P1Y');
    var_dump($d->days);
    // result: int 0


    $a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
    $b = DateTime::createFromFormat("d.m.Y", "03.01.2010");

    $d = $b->diff($a);
    var_dump($d->days);
    // result: int 2

Я использую XAMPP для Linux 1.7.3a с PHP 5.3.1 в Linux Mint 10.

person Marcin    schedule 08.02.2011

Можете ли вы сказать мне точное решение, которое вам нужно...

Я использовал код ниже,

$interval = new DateInterval('P2Y4DT6H8M');

эхо $интервал->d;

это дает o/p как 4

если я использую вот так,

$interval = new DateInterval('P2Y');

echo $interval->d;

это дает o/p как 0

Таким образом, он вернет день, который вы указали в Dateinterval(), иначе он вернет ноль.

U скажите мне ур точное требование, пожалуйста......... :)

person Vinoth13    schedule 08.02.2011
comment
Я говорю не о -›d, а о -›днях. Согласно инструкции это должно быть общее количество дней, но это не так... по крайней мере, не в Windows. - person 30thh; 08.02.2011