2013-10-10 38 views
0

我使用DateTime和差异来计算两个日期之间的天数的区别如下:日期时间差异返回怪异输出

$data_inceput = '2013-10-01'; 
$data_sfarsit = '2013-10-31'; 
$date1 = new DateTime($data_inceput); 
$date2 = new DateTime($data_sfarsit); 

$nr_zile = $date2->diff($date1)->format("%a"); 

$nr_zile出来作为6015的一些原因。

如果我`var_dump($date2->diff($date1));

我得到:

object(DateInterval)#6 (8) { 
    ["y"] => int(0) 
    ["m"] => int(0) 
    ["d"] => int(30) 
    ["h"] => int(0) 
    ["i"] => int(0) 
    ["s"] => int(0) 
    ["invert"] => int(1) 
    ["days"] => int(6015) 

任何想法,为什么它的行为这样?我也尝试将UTC的时区设置为每个日期,并获得相同的结果。

编辑:我在生产服务器上测试过,它工作得很好,唯一的问题是在本地的apache服务器上,但php设置基本上是两个相同的。

+0

的PHP版本您使用的?我在PHP 5.3.13上测试了这个代码,并且没有问题($ nr_zile出来的时候是30) –

+0

列举检查。它也适用于我在远程服务器上,但给我在我的本地apache服务器上面的结果...甚至是PHP设置基本相同 – Bogdan

+0

您是否在创建DateTime实例之前设置UTC时区,使用'date_default_timezone_set '?如果没有,请做...所有相同的结果:'diff'结果相当奇怪,但是您是否愿意使用'date_default_timezone_get'来说明您所在的时区? –

回答

2

这是Windows的https://bugs.php.net/bug.php?id=51184

升级到最新的PHP版本问题,或者使用这方面的任何替代的解决方案。

+0

是的,这似乎是问题,我不能只升级到最新的PHP版本。猜猜我必须改变我计算日期差异的方式。 – Bogdan

1

你可以使用另一种方法:

$data_inceput = strtotime('2013-10-01'); 
$data_sfarsit = strtotime('2013-10-31'); 
$daysBetween = round(($data_sfarsit - $data_inceput)/86400); 
+0

我结束了使用这种方法,即使存在一些错误的可能性(主要是关于DST),但我并不介意,因为我只对天而非小时感兴趣,并且错误不是累积的。 – Bogdan