DateTime: Баг или фича?

224
10 декабря 2016, 10:05
function func_diff($d1) {
    $of = new DateTime();
    $of->setTimestamp($d1);
    $to = new DateTime();
    //$to->setTimestamp('1475107200'); // 29.09.2016 00:00:00
    return $to->diff($of)->format('%r%a');
}

функция должна выводить количество дней между $d1 и unixtimestamp (1475107200)

При этом func_diff('1475193600') (30.09.2016 00:00:00) выводит 0, а func_diff('1475107200') (29.09.2016 00:00:00) выводит -0

PHP Version 5.6.24

Answer 1

Вы пытаетесь получить разницу в днях а у дат разница в часах:

function func_diff($d1) {
    $to = new DateTime("now");
    $to->setTimezone(new DateTimeZone("UTC"));
    $of = new DateTime('@'.$d1);
    var_dump($to->format('c'), $of->format('c'));
    var_dump($to->diff($of)->format('%R%h часов'));
}
func_diff('1475193600'); //30.09.2016 00:00:00
func_diff('1475107200'); //29.09.2016 00:00:00
func_diff('1475020800'); //28.09.2016 00:00:00

Пример

В вашем примере вы получаете "-" или пусто с помощью флага %r (указывает какая разница, положительная или отрицательная). Затем кол-во дней флагом %a, а их 0. В итоге, вы получаете или 0 или -0.

Answer 2

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

  function kupoig_diff($d1) {
        $of = new DateTime();
        $of->setTimestamp(strtotime(date('d-m-Y', $d1)));
        $to = new DateTime();
        $to->setTimestamp(strtotime(date('d-m-Y')));
        return $to->diff($of)->format('%r%a');
    }
READ ALSO
Большой POST запрос

Большой POST запрос

Бьюсь второй день над следующей задачей: есть база данных адресов типа "область", "город", "улица", "дом" и тд

339
implode и многомерные массивы

implode и многомерные массивы

Мне нужно в логах красиво, С ОТСТУПАМИ выводить многомерные массивыПока у меня есть функция для вывода без отступов:

423
Get сurrent URL

Get сurrent URL

Есть ajax форма на которую переходят по ссылке с видео (жалоба), ссылка вида: http://sitecom/abuse/index

331