Вычислите число часов между 2 датами в PHP

Как я вычисляю различие между двумя датами в течение многих часов?

Например:

day1=2006-04-12 12:30:00
day2=2006-04-14 11:30:00

В этом случае результатом должны составить 47 часов.

98
задан Peter Mortensen 12 September 2010 в 13:55
поделиться

5 ответов

$day1 = "2006-04-12 12:30:00"
$day1 = strtotime($day1);
$day2 = "2006-04-14 11:30:00"
$day2 = strtotime($day2);

$diffHours = round(($day2 - $day1) / 3600);

Я полагаю, что функция strtotime() принимает этот формат даты.

3
ответ дан 24 November 2019 в 05:08
поделиться
$t1 = strtotime( '2006-04-14 11:30:00' );
$t2 = strtotime( '2006-04-12 12:30:00' );
$diff = $t1 - $t2;
$hours = $diff / ( 60 * 60 );
69
ответ дан 24 November 2019 в 05:08
поделиться

ваш ответ:

round ((strtotime ($ day2) - strtotime ($ day1)) / (60 * 60))

16
ответ дан 24 November 2019 в 05:08
поделиться

Эта функция помогает вычислить точные годы и месяцы между двумя заданными датами, $doj1 и $doj. Пример 4.3 означает 4 года и 3 месяца.

<?php
    function cal_exp($doj1)
    {
        $doj1=strtotime($doj1);
        $doj=date("m/d/Y",$doj1); //till date or any given date

        $now=date("m/d/Y");
        //$b=strtotime($b1);
        //echo $c=$b1-$a2;
        //echo date("Y-m-d H:i:s",$c);
        $year=date("Y");
        //$chk_leap=is_leapyear($year);

        //$year_diff=365.25;

        $x=explode("/",$doj);
        $y1=explode("/",$now);

        $yy=$x[2];
        $mm=$x[0];
        $dd=$x[1];

        $yy1=$y1[2];
        $mm1=$y1[0];
        $dd1=$y1[1];
        $mn=0;
        $mn1=0;
        $ye=0;
        if($mm1>$mm)
        {
            $mn=$mm1-$mm;
            if($dd1<$dd)
            {
                $mn=$mn-1;
            }
            $ye=$yy1-$yy;
        }
        else if($mm1<$mm)
        {
            $mn=12-$mm;
            //$mn=$mn;

            if($mm!=1)
            {
                $mn1=$mm1-1;
            }

            $mn+=$mn1;
            if($dd1>$dd)
            {
                $mn+=1;
            }

            $yy=$yy+1;
            $ye=$yy1-$yy;
        }
        else
        {
            $ye=$yy1-$yy;
            $ye=$ye-1;

            $mn=12-1;

            if($dd1>$dd)
            {
                $ye+=1;
                $mn=0;
            }
        }

        $to=$ye." year and ".$mn." months";
        return $ye.".".$mn;

        /*return daysDiff($x[2],$x[0],$x[1]);
         $days=dateDiff("/",$now,$doj)/$year_diff;
        $days_exp=explode(".",$days);
        return $years_exp=$days; //number of years exp*/
    }
?>
0
ответ дан 24 November 2019 в 05:08
поделиться

Новые версии PHP предоставляют несколько новых классов, называемых DateTime , DateInterval , DateTimeZone и DatePeriod . Классная особенность этих классов заключается в том, что они учитывают разные часовые пояса, високосные годы, високосные секунды, летнее время и т. Д. И, кроме того, они очень просты в использовании. Вот что вы хотите с помощью этих объектов:

// Create two new DateTime-objects...
$date1 = new DateTime('2006-04-12T12:30:00');
$date2 = new DateTime('2006-04-14T11:30:00');

// The diff-methods returns a new DateInterval-object...
$diff = $date2->diff($date1);

// Call the format method on the DateInterval-object
echo $diff->format('%a Day and %h hours');

Возвращаемый объект DateInterval также предоставляет другие методы, кроме формата . Если вы хотите получить результат только в часах, вы можете сделать что-то вроде этого:

$date1 = new DateTime('2006-04-12T12:30:00');
$date2 = new DateTime('2006-04-14T11:30:00');

$diff = $date2->diff($date1);

$hours = $diff->h;
$hours = $hours + ($diff->days*24);

echo $hours;

А вот ссылки на документацию:

Все эти классы также предлагают процедурный / функциональный способ работы с датами. Поэтому взгляните на обзор: http://php.net/manual/book.datetime.php

187
ответ дан 24 November 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: