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