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 더하고, 아니면 고정된 일수 더함.
}
// '월'이 음수면…
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
< ?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
$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
반응형