본문 바로가기
코딩

[PHP] 두 날짜, 시간 차이 계산 (디데이까지 남은 시간 구하기)

by 우월한하루 2024. 4. 10.
728x90
반응형

 

 

 

특정한 두 개의 날짜 사이에 며칠이 차이 나는지, 혹은 몇 시간 몇 분이 차이 나는지 구하고 싶을 때가 있습니다.

또는 현재시간부터 디데이까지 남은 시, 분, 초는 얼마나 되는지 알고 싶은 경우도 있죠.

 

두 시간 간의 차이를 구하는 방법을 php 함수를 통해서 알아보도록 하겠습니다.

 

 

반응형

 


 

 

함수 만들기

 

 

시작 시간과 종료시간을 받아와서 두 값 간의 차이를 구하는 함수를 만들어 보겠습니다.

 

function gap_time($start_time, $end_time) {
	
	$start_time = strtotime($start_time);
	$end_time = strtotime($end_time);

	$diff = $end_time - $start_time;
	
	$day = floor($diff/86400);
	
	$diff = $diff-($day*86400);

	$hours = floor($diff/3600);

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

	$min = floor($diff/60);

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

	return sprintf("%d일 %d시간 %d분", $day, $hours, $min); 

}

 

 

 

728x90

 

 

함수는 위와 같이 만들어 줄 수 있습니다.

 

값을 입력해서 출력이 잘 되는지 확인해 보겠습니다.

오늘날짜로부터 5월 5일 어린이날까지 얼마나 남았는지 보겠습니다.

 

gap_time("2024-04-10", "2024-05-05");

 

코드 결과 출력

 

 

시, 분, 초를 입력해주지 않고 날짜만 넣었기 때문에 위와 같이 남은 날짜 25일만 나오게 됩니다.

그럼 현재시간으로부터 디데이까지 남은 날짜계산은 어떻게 하면 될까요?

 

아래 코드 설명에서 다뤄보겠습니다.

 

 

코드 설명

 

 

$start_time = strtotime($start_time);
$end_time = strtotime($end_time);

 

 

받아온 날짜를 타임스탬프 형식으로 바꿔줍니다.

이미 받아온 값이 타임스탬프 형식이라면 위의 코드는 생략해야 합니다.

 

 

$day = floor($diff/86400);

 

 

floor 함수를 통해서 소수점아래 값들은 반올림해 줍니다.

 

sprintf("%d일 %d시간 %d분", $day, $hours, $min);

 

 

계산한 값을 return을 통해 출력해 줍니다.

% 02d 일 이렇게 % 뒤에 02를 붙이면 자릿수를 두 자리로 맞춰줍니다.

2일이면 02일로 표기가 되는 것입니다.

 

그러면 아래와 같이 현재 시간을 받아와 보겠습니다.

 

echo gap_time(time(), "2024-05-05"); 

 

위와 같이 값을 입력받는다면 "$start_time"은 타임스탬프로 값을 받고,

"$end_time"은 기존 날짜형식으로 값을 받기 때문에 start_time값을 타임스탬프로 변환해 주는 코드는 주석처리합니다.

 

 

//$start_time = strtotime($start_time);
$end_time = strtotime($end_time);

 

 

코드 결과 출력

 

 

현재 제가 게시물을 작성하는 시간 기준으로 5월 5일까지 24일 14시간 21분이 남았군요.

 

정확하게는 분으로 따진다면 22분이 남아야 되는데 초단위까지 계산을 해서,

21분으로 표기가 되고 있습니다. 저처럼 초단위까지는 표기하지 않길 원한다면 아래와 같이 출력을 수정해 주세요.

 

sprintf("% d일 % d시간 % d분", $day, $hours, $min+1);

 

 


 

결론

 

이번 포스팅에서는 php를 사용하여 두 날짜 간의 차이를 구하는 함수를 만들어 보았습니다.

이 함수는 정말 다양하게 활용될 수 있는 함수이므로,

사용 방법을 익혀두고 시간차이, 이벤트 기간 등등 여러 곳에서 활용해 보시길 바랍니다.

728x90
반응형

댓글