2017-03-15 27 views
-1

我试图弄清两个月之间的差异。例如对于下面,我想要2个月。php中的两个日期之间的差异

$datetime1 = date_create('2017-03-01'); 
$datetime2 = date_create('2017-04-30'); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%m months'); 
echo $interval->format('%d days'); 

这给了我2个月和1天。

+1

有趣的是,它给了我'1个月29天'这就是我所期望的 – RiggsFolly

+2

为什么你想在这两个日期之间没有2个月的时候得到2个月的结果? – RiggsFolly

+0

@RiggsFolly奇怪的是,如果没有使用默认时区,我也会在5.6.24上获得“2个月1天”。当使用'date_default_timezone_set('America/New_York');'我回来'1个月29天 - 所以这是这个问题的可能答案。 –

回答

2

您得到不正确结果的原因很可能是因为您尚未设置默认时区,一个用于“您的”时区。在

添加和例如:

date_default_timezone_set('America/New_York'); 

返回正确的时间差,而不是使用它返回你目前获得。

使用你自己的时区,或将其设置在你的系统文件中。

从在“用户投稿须知”手册http://php.net/manual/en/datetime.diff.php

“当使用DATEDIFF确保您的时区是正确的,对我来说在Windows 7 64位它的表现很奇怪,当时区是错的(我正在比较数据库中的时间和照片中的exif元数据)例如:date_default_timezone_set('Europe/Oslo');“

并通过其余的“用户注释”。

  • 另一个可能的原因是服务器的位置不同于“你”在“地球”上的位置。从RiggsFolly给出意见

相关链接:

这可能是在这里打球。


编辑:

注意到任择议定书接受这个答案,通过RiggsFolly从评论拍摄后,也补充:

date_default_timezone_set('UTC'); 

我会称这是一个合资企业,我不能完全信任这一点。

+0

请回答您的问题,您的php.ini文件中设置了什么是您的和date'timezone =“???”'。 – RiggsFolly

+0

@RiggsFolly我做了一个编辑答案,我不知道,因为他们可能不是我的邻居;-) –

+1

我认为这回答了这个问题http://stackoverflow.com/questions/19755820/php-日期和日光节约时间混淆 – RiggsFolly