2011-03-15 182 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计算日期之间的年/月/日

我已经尝试了很多不同的方法,我总是以2个月而不是3个月为目标。有谁知道为什么吗?

+0

为什么会是3个月?不到90天已经过了所以它的<3个月 – JohnP 2011-03-15 08:23:39

+0

你为什么认为应该是3个月?毕竟1和3之间的差异是2 ..如果有的话,应该是2个月和* 13天* ..顺便说一句。日期差异总是很困难,并且取决于“月”的定义。 – poke 2011-03-15 08:24:14

+0

我在你的日期之间只看到两个月:Januar&Februar。你为什么认为应该有三个? – ZeissS 2011-03-15 08:25:03

回答

3

你得到的答案是完全正确的!

+0

*头重击* .....当然......我到底在想什么!我的客户得到了我的整个头拧!谢谢你的清晰度 – andy 2011-03-15 08:30:51

8

尝试使用PHP的内置日期API,而不是自己做数学。

使用DateTimeDateIntervalDateTime::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我相信它的工作原理只有5.3 ..我可能是错误的...我昨天试过了,它没有工作..这是热解释我得到了...但不管怎么说解决了这个问题... – andy 2011-03-15 08:35:40

相关问题