Как сделать этот отсчет - PullRequest
1 голос
/ 13 февраля 2012

У меня есть дата окончания в базе данных

я получаю текущую дату, предположим, в UTC

class Datecalc
{

    public $year;
    public $month;
    public $day;
    public $hour;
    public $min;
    public $sec;

    function diff($start,$end = false)
    {
        if($start > $end)
        {
            $this->day = 0;
            $this->hour = "00";
            $this->min = "00";
            $this->sec = "00";
            return false;

        }
        if(!$end) { $end = time(); }
        if(!is_numeric($start) || !is_numeric($end)) { return false; }
        $start  = date('Y-m-d H:i:s',$start);
        $end    = date('Y-m-d H:i:s',$end);
        $d_start    = new DateTime($start);
        $d_end      = new DateTime($end);
        $diff = $d_start->diff($d_end);

        $this->year    = $diff->format('%y');
        $this->month    = $diff->format('%m');
        $this->day      = $diff->format('%d');
        $this->hour     = $diff->format('%H');
        $this->min      = $diff->format('%I');
        $this->sec      = $diff->format('%S');

        return true;
    }

}

Я использую эту функцию для вычисления разницы во времени, нопроблема в том, что я не могу сосчитать дни до 99, а когда дата 00:00:00, дни -1 и его значение равно 98 и время 23:59:59, в этом коде все хорошо, но есличисло дней становится больше 30, оно сбрасывается на 01, я думаю, вы понимаете, что я пытаюсь сказать, пожалуйста, помогите !!

другими словами, мне нужно считать дни отдельно, а время нужнобыть привязанным к этим дням

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Во-первых, вы должны проверить, имеет ли $ end значение false, прежде чем проверять, что $ start больше, чем $ end.

При этом метод diff возвращает объект DateInterval (http://us.php.net/manual/en/class.dateinterval.php), с номеромпараметров, включая общее количество дней между датами, а также годы, месяцы, дни и т. д. Вы, вероятно, хотите использовать то, что уже возвращено методом diff, а не функцию форматирования.

$diff = $d_start->diff($d_end);
echo 'Total days difference: '.$diff->days;
echo 'Year, Month, Days, time difference: '.
$diff->y.' y, '.$diff->m.' m, '.$diff->d.' d, '.$diff->h.' h, '.$diff->i.' m, '.$diff->s.' s, ';
1 голос
/ 13 февраля 2012

Метод, который вы используете, никогда не позволит вам получить дни> 30, потому что любые дни свыше 30 будут преобразованы в другой месяц ...Это может быть лучшим подходом для вас:http://www.prettyscripts.com/code/php/php-date-difference-in-daysИли жеhttp://www.bizinfosys.com/php/date-difference.html(Простой поиск в Google, кстати ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...