본문 바로가기
코딩/php

[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);

 

 

728x90
반응형

댓글