[PHP] 두 날짜 사이의 경과 시간 구하기
주어진 두 개의 날짜와 시간(2019-06-30 12:34:56) 사이의 경과 시간을 구하는 코드이다.
<?php
/**
* 두 날짜 사이의 경과 시간 구하는 함수
*/
function getTimeDiff($date1, $date2, $format) {
$date1Time = new DateTime($date1);
$date2Time = new DateTime($date2);
if (version_compare('5.3', phpversion(), '<=')) {
$interval = $date1Time->diff($date2Time);
$diff = $interval->format($format);
} else {
$diff = sh_date_interval($date1Time,$date2Time, $format);
}
return $diff;
}
/**
* http://stephenharris.info/date-intervals-in-php-5-2/
*/
function sh_date_interval($_date1,$_date2, $format) {
//Make sure $date1 is ealier
$date1 = ($_date1 <= $_date2 ? $_date1 : $_date2);
$date2 = ($_date1 <= $_date2 ? $_date2 : $_date1);
//Calculate R values
$R = ($_date1 <= $_date2 ? '+' : '-');
$r = ($_date1 <= $_date2 ? '' : '-');
//Calculate total days
$total_days = round(abs($date1->format('U') - $date2->format('U'))/86400);
//A leap year work around - consistent with DateInterval
$leap_year = ( $date1->format('m-d') == '02-29' ? true : false);
if( $leap_year ){
$date1->modify('-1 day');
}
$periods = array( 'years'=>-1,'months'=>-1,'days'=>-1,'hours'=>-1);
foreach ($periods as $period => &$i ){
if($period == 'days' && $leap_year )
$date1->modify('+1 day');
while( $date1 <= $date2 ){
$date1->modify('+1 '.$period);
$i++;
}
//Reset date and record increments
$date1->modify('-1 '.$period);
}
extract($periods);
//Minutes, seconds
$seconds = round(abs($date1->format('U') - $date2->format('U')));
$minutes = floor($seconds / 60);
$seconds = $seconds - $minutes * 60;
$replace = array(
'%y' => $years,
'%Y' => zeroise($years, 2),
'%m' => $months,
'%M' => zeroise($months, 2),
'%d' => $days,
'%D' => zeroise($days, 2),
'%a' => zeroise($total_days, 2),
'%h' => $hours,
'%H' => zeroise($hours, 2),
'%i' => $minutes,
'%I' => zeroise($minutes, 2),
'%s' => $seconds,
'%S' => zeroise($seconds, 2),
'%r' => $r,
'%R' => $R
);
return str_replace(array_keys($replace), array_values($replace), $format);
}
/**
* https://developer.wordpress.org/reference/functions/zeroise/
*/
function zeroise( $number, $threshold ) {
return sprintf( '%0' . $threshold . 's', $number );
}
PHP 5.2 버전 이상에서 사용할 수 있으며 실행은 아래와 같이 한다.
<?php
$format = '%y년 %m달 %d일 %h시간 %i분 %s초';
$date1 = '2019-07-02 10:56:12';
$date2 = '2019-07-03 03:19:52';
echo getTimeDiff($date1, $date2, $format);
경과 시간은 0년 0달 0일 16시간 23분 40초
처럼 표시된다.