티스토리 뷰

반응형

코딩을 하다보면 이런 함수가 있으면 코딩할때 도움이 되지 않을까? 이런 생각에 구글링으로 정보를 얻을 때가 많습니다. 시간과 날짜의 차이를 돌려주는 함수가 있지 않을까? 해서 검색했는데, 속시원하게 정확히 찦어주는 내용이 없는 것 같아서 여러 코딩의 아이디어를 합쳐 직접 만들어 봤습니다.

원리는 php strtotime이란 초단위 계산하는 내부 함수를 이용하는 방법인데, 원리는 상당히 간단한 편입니다.

우선 완성된 코드를 보겠습니다.

php에서 gap_time(시작날짜시간, 종료날짜시간) 함수를 호출합니다.

<?php
// 두 날짜의 차이를 구한다.
function gap_time($start_date, $end_date) {
	
	$start_time = strtotime($start_date);
	$end_time = strtotime($end_date);

	$diff = $end_time - $start_time;

	$hours = floor($diff/3600);

	$diff = $diff-($hours*3600);

	$min = floor($diff/60);

	$sec = $diff - ($min*60);

	return sprintf("%02d:%02d:%02d", $hours, $min, $sec); 

}

print gap_time("2021-12-10 18:00:00","2021-12-10 23:50:00");

?>

 

위의 코드로 "2021-12-10 18:00:00"와 "2021-12-10 23:50:00"의 차이를 구하는 것입니다. 결과를 화면으로 보면,

실행결과 화면

 

php 내부함수중 strtotime 이란 것에 대한 이해와 return에서 보여주는 sprintf에 대해서 정도만 안다면 이해하기 쉬운 코드로 생각됩니다.

 

사용방법은 gap_time("2021-12-10 18:00:00","2021-12-10 23:50:00");

이렇게 호출하는 방식입니다.

 

sprintf의 간단한 예제

<?php
echo sprintf ("|%+4d|%+4d|\n",   1, -1);
echo 
sprintf ("|%-4d|%-4d|\n",   1, -1);
echo 
sprintf ("|%+-4d|%+-4d|\n", 1, -1);
?>

outputs:

|  +1|  -1|
|1   |-1  |
|+1  |-1  |

 

strtotime 함수에 대한 예제

문자열 형태의 날짜를 입력받아 UNIX timestamp 값을 돌려주는 함수입니다.  미국인들은 쉽게 쓸 수 있지만, 우리나라와는 날짜 표현 방법이 틀리기 때문에 약간 헷갈릴 소지가 있어 예시를 통해서 좀 더 알아보면 좋겠습니다.
  

time()     1104151691
strtotime("now")     1104073200  // 주의가 필요함. "now"

strtotime("1972-09-24")     86108400
strtotime("72-9-24")     86108400
strtotime("72-09-24")     86108400
strtotime("9/24/72")     86108400
strtotime("24 September 1972")     86108400
strtotime("24 Sept 72")     86108400
strtotime("24 Sep 72")     86108400
strtotime("Sep 24, 1972")     86108400
strtotime("24-sep-72")     86108400
strtotime("24sep72")     86108400

strtotime("20:02")     1104145320
strtotime("8:02pm")     1104145320

strtotime("last day")     1103986800
strtotime("26-dec-2004")     1103986800
strtotime("next day")     1104246000
strtotime("next monday")     1104678000
date("Y-m-d H:i:s", strtotime("last day"))     2004-12-26 00:00:00

strtotime("1 year")     1135609200
strtotime("1 year ago")     1072450800
strtotime("3 years")     1198681200
strtotime("2 days")     1104246000
strtotime("tomorrow")     1104159600
strtotime("1 days")     1104159600
strtotime("yesterday")     1103986800
strtotime("-1 days")     1103986800
strtotime("1 days ago")     1103986800
strtotime("20041227")     1104073200

반응형
댓글