Как я вычисляю различие между двумя датами в течение многих часов?
Например:
day1=2006-04-12 12:30:00
day2=2006-04-14 11:30:00
В этом случае результатом должны составить 47 часов.
$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() принимает этот формат даты.
$t1 = strtotime( '2006-04-14 11:30:00' );
$t2 = strtotime( '2006-04-12 12:30:00' );
$diff = $t1 - $t2;
$hours = $diff / ( 60 * 60 );
ваш ответ:
round ((strtotime ($ day2) - strtotime ($ day1)) / (60 * 60))
Эта функция помогает вычислить точные годы и месяцы между двумя заданными датами, $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*/
}
?>
Новые версии 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