그러냐

[PHP] 두 날짜 차이 "0년 0개월 0일" 구하기 본문

php

[PHP] 두 날짜 차이 "0년 0개월 0일" 구하기

관절분리 2016. 1. 25. 14:39
반응형


▶ PHP 5.3 버전 이상이라면 아래처럼 간편하게 구할 수 있습니다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
< ?php
$datetime1 = new DateTime('2002-12-25');
$datetime2 = new DateTime('2013-11-05');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y년 %m개월 %d일'); // 10년 10개월 11일
────────────────────────────────────────
< ?php
$datetime1 = date_create('2002-12-25');
$datetime2 = date_create('2013-11-05');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%y년 %m개월 %d일'); // 10년 10개월 11일
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- http://php.net/manual/en/book.datetime.php



▶ PHP 5.3 미만이라면 아래처럼 구하면 됩니다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
< ?php

// 먼저 원하는 날짜를 할당합니다.
$date1 = '2002-12-25';
$date2 = '2013-11-05';

// 년, 월, 일을 별도의 변수에 할당합니다.
sscanf($date1,'%4d-%2d-%2d',$y1,$m1,$d1);
sscanf($date2,'%4d-%2d-%2d',$y2,$m2,$d2);

// 각각의 차를 구합니다.
$d3 = $d2 - $d1; // 5 - 25 = -20
$m3 = $m2 - $m1; // 11 - 12 = -1
$y3 = $y2 - $y1; // 2013 - 2002 = 11

// '일'이 음수면…
if ( $d3 < 0 ) {
    $m3--; // '월'에서 1을 빼주고
    $d3+= date('t',mktime(0,0,0,$m2-1,1,$y2)); // '일'에 전달의 총 일수를 더해줍니다.
    // 다른 방법 1. date('t',strtotime($date2.' -1 month'))
    // 다른 방법 2. 편하게 만년 달력을 이용 [생략]
    // 다른 방법 3. 전달이 2월이면 윤년인지 계산해 28이나 29 더하고, 아니면 고정된 일수 더함.
}

// '월'이 음수면…
if ( $m3 < 0 ) {
    $y3--; // '년'에서 1을 빼주고
    $m3+= 12; // 12를 더하면 끝.
}

// '년'이 음수면 불량. 두 번째 날짜가 크면 됩니다. 함수화할 때 주의!
// 기타 예외 처리 생략합니다. 숙제!

echo $y3.'년 '.$m3.'개월 '.$d3.'일'; // 10년 10개월 11일
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

+ sscanf()
- http://php.net/manual/kr/function.sscanf.php
- http://php.net/manual/en/function.sscanf.php

+ mktime()
- http://php.net/manual/en/function.mktime.php

+ date()
- http://php.net/manual/kr/function.date.php
- http://php.net/manual/en/function.date.php


반응형