2011-03-15 8 views
2
$date1 = "2000-01-01"; 
$date2 = "2011-03-14"; 

$diff = abs(strtotime($date2) - strtotime($date1)); 
$years = floor($diff/(365 * 60 * 60 * 24)); 
$months = ceil(($diff - ($years * 365 * 60 * 60 * 24))/((365 * 60 * 60 * 24)/12)); 
$months2 = floor(($diff - ($years * 365 * 60 * 60 * 24))/((365 * 60 * 60 * 24)/12)); 
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months2 * 30 * 60 * 60 * 24)/ (60 * 60 * 24)); 

대답은 11 years , 2 months and 14 days입니다. 11 years, 3 months and 14 days일까요?날짜 사이의 년/월/일 계산

저는 여러 가지 방법으로 시도해 봤지만 항상 3 개월이 아니라 2 개월로 끝납니다. 그 이유를 아는 사람이 있습니까?

+0

왜 3 개월입니까? 90 일 미만이 지나면 <3 개월이됩니다 – JohnP

+0

왜 3 개월이되어야한다고 생각합니까? 결국 1과 3 사이의 차이는 2입니다. 무엇이든간에, 2 개월과 13 일 *이어야합니다. .. Btw. 날짜 차이는 항상 어렵고 "달"의 정의에 달려 있습니다. – poke

+0

Januar & Februar. 왜 3 명이 있어야한다고 생각하니? – ZeissS

답변

3

당신이 얻는 답은 완전히 옳습니다!

+0

* head whack * ..... 물론 ... 도대체 무슨 생각을하고 있니 !!!! 내 의뢰인이 내 머리를 망쳤다 !!! 선명도 주셔서 감사합니다 – andy

8

직접 수학을하는 대신 PHP의 내장 날짜 API를 사용해보십시오. DateTime, DateIntervalDateTime::diff 기능을 사용

:

$date1 = new DateTime("2000-01-01"); 
$date2 = new DateTime("2011-03-14"); 
$diff = $date2->diff($date1); 
var_dump($diff);' 
/* is prints: 
object(DateInterval)#3 (8) { 
    ["y"]=> 
    int(11) 
    ["m"]=> 
    int(2) 
    ["d"]=> 
    int(13) 
    ["h"]=> 
    int(0) 
    ["i"]=> 
    int(0) 
    ["s"]=> 
    int(0) 
    ["invert"]=> 
    int(1) 
    ["days"]=> 
    int(4090) 
} 
*/ 

그러면 적어도 당신은 당신이 (결과가 올바른 보인다) 실수를하는 경우 걱정할 필요가 없습니다.

+0

난 단지 5.2 내가 그걸로 잘못 될 수 있다고 생각 ... 나는 어제 그것을 시도하고 그것을 didnt 일을 .. 그리고 그것은 hte 설명을 가지고있어 ...하지만 어쨌든 고마워 문제를 해결했다 ... – andy