2014-06-06 4 views
1

"Y-m-d"형식으로 사용자가 채울 'birthdate'열이있는 데이터베이스가 있습니다.생년월일과 현재 날짜의 일차 계산

이제는 생일 축하 메시지를 남기고 싶습니다.

예. 현재 날짜가 2014-06-06이고 사용자 생년월일이 1980-06-26이므로 6 월 26 일에 생일이 올 것입니다. "생일은 20 일 후에 생일이됩니다"

내가 시도한 것은 다음과 같음 -

$date1= date("m-d"); 
$date2=date("m-d",strtotime($data['birthdate'])); 

$dateDiff = abs(strtotime($date2) - strtotime($date1)); 
$remainedDays = floor($dateDiff/(60*60*24)); 

echo "Birthday Is After $remainedDays Days"; 

그러나이 코드는 0 일 여기

+1

훨씬 더 나은 DateTime 클래스를 사용하십시오. –

+0

이것은 MySQL과 어떤 관련이 있습니까? 없으면 태그를 제거하십시오. –

+0

Abhik, 아래 DateTime 클래스를 사용하여 솔루션을 게시했습니다. –

답변

3

이렇게 최소 자세한 방법은 DateTime classes와 특이 적으로 DateTime::diff method이다. 시간이 각 날짜의 자정인지 확인한 다음 올해 생일이 이미 발생했는지 확인해야합니다.

<?php 
$birthday = "1980-06-24"; 

// get date of birthday this calendar year 
$parts = explode('-', $birthday, 2); 
$birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00'); 
$today = new DateTime('midnight today'); 

if ($birth_date < $today) { 
    // next birthday is in one year 
    $birth_date->modify("+1 Year"); 
} 

// get number of days days remaining 
$diff = $birth_date->diff($today); 

if ($diff->days > 0) { 
    echo "There are " . $diff->days . " remaining until your birthday."; 
} else { 
    echo "Happy birthday!"; 
} 
+0

그것은 나를 위해 완벽하게 일했다 ... !!! 도와 주셔서 대단히 감사합니다 – darshan

+0

안녕하세요. 기꺼이 도와 드리겠습니다. PHP의 날짜 및 시간 처리는 까다 롭지 만 DateTime 확장은 많은 것을 단순화합니다. 나는 사람들이 여전히 strtotime()과 오래된 함수를 사용하는 것을 보는 것을 싫어한다. 데이트 리슨이 [날짜와 시간 프로그래밍 안내서] (http://www.phparch.com/books/phparchitects-guide-to-date-and-time)에서 날짜와 함께 많은 일을한다면 -programming /)은 가지고있는 좋은 참고 자료이다. –

+0

오오 .. 예 .. 고마워요! 나는이 책을 확실히 통과 할 것이다. – darshan

0

을주고있다하면 곧 B'days에 사용할 수있는 알고리즘이다. 이것은 B'day와 윤년을 02/29로 간주합니다.

필요에 따라 코드를 수정할 수 있습니다. 이미 만료 된 곧 B'day 나 B'day를 확인할 것입니다.

$bday = new DateTime("1980-06-26"); 
$today = new DateTime(); 
$b_y = $bday->format('Y'); 
$b_d = $bday->format('d'); 
$b_m = $bday->format('m'); 

if((bool)$bday->format('L') && $b_d == 29 && $b_m == 2){ 
    if((bool)$today->format('L')){ 
    $bday_obj = new DateTime(date('Y').'-'.$b_m.'-'.$b_d); 
    $diff = $bday_obj->diff($today); 
    }else{ 
    for($i=1;$i++;$i<=3){ 
     $today->add(new DateInterval('P1Y')); 
     if((bool)$today->format('L')){ 
     $bday_obj = new DateTime(date('Y').'-'.$b_m.'-'.$b_d); 
     $diff = $bday_obj->diff($today); 
     break ; 
     } 
    } 
    } 
}else{ 
    $bday_obj = new DateTime(date('Y').'-'.$b_m.'-'.$b_d); 
    $diff = $bday_obj->diff($today); 
} 

$now = new DateTime() ; 
if($now > $bday_obj){ 
    echo 'Your birthday was over '.$diff->format('%a days').' before'; 
}else{ 
    echo 'Your birthday is after '.$diff->format('%a days'); 
} 
관련 문제