PHP ceil возвращает число с плавающей точкой - PullRequest
2 голосов
/ 13 ноября 2011

Я создал функцию, которая возвращает разницу между двумя датами

<?php


class days {
    function dateDiff($start, $end) {
        $start_ts = strtotime($start);

        $end_ts = strtotime($end);

        $diff = $end_ts - $start_ts;

        $diff1 = ceil($diff / 86400);

        return $diff1;

    }
}

У меня есть этот код в представлении:

<?php
$a    = new days();
$days = $a->dateDiff($v[17], date('Y/m/d'));
if ($days < 30) {
    $ds = $days;
    $tm = 'days';
} else {
    if ($days < 365) {
        $ds = $days / 30;
        $tm = 'months';
    } else {
        $ds = $days / 365;
        $tm = 'years';
    }
}

$ v [17] - это дата, возвращаемая из базы данных в представление.

Когда я введу, например, статью в августе 2011 года ... Будет отображено:

2,9666666666667 месяцев назад

Я спрашиваю себя ... Как этот метод Ceil не мог вернуть значение типа int, как и предполагалось?

если это нормально, то каково решение?

Заранее спасибо:)

1 Ответ

3 голосов
/ 13 ноября 2011

Функция ceil отлично работает, когда возвращает количество дней.

Но проблема здесь:

if ($days<365){
   $ds=$days/30;
   $tm='months';
}

Вы не использовали ceil на этот раз! Вы должны попробовать что-то вроде $ds = ceil($days / 30);.

То же самое для количества лет.

Возможно, было бы точнее использовать round вместо ceil, чтобы 32 дня не переводились за 2 месяца:

$days = $a->dateDiff('10 oct 2011',date('Y/m/d'));

if ($days < 30) {
    $ds = $days;
    $tm = 'day';
}
else {
    if ($days < 365){
        $ds = round($days / 30);
        $tm = 'month';
    }
    else {
        $ds = round($days / 365);
        $tm = 'year';
    }
}

if ($ds > 1) {
    $tm .= 's';
}

echo "$ds $tm"; # => 1 month; or 2 months using ceil function
...