php中两个日期的月差

php中两个日期的月差,php,date,timezone,date-difference,Php,Date,Timezone,Date Difference,我想知道两个月之间的差额。例如,对于下面的例子,我想要2个月 $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天的时间

我想知道两个月之间的差额。例如,对于下面的例子,我想要2个月

$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天的时间

您得到错误结果的原因很可能是因为您没有设置默认时区,即“您的”时区

在添加和中,例如:

date_default_timezone_set('America/New_York');
返回正确的时差,而不使用它返回您当前得到的时间差

将其用于您自己的时区,或在系统文件中进行设置

从“用户贡献注释”下的手册中:

“使用datediff时,请确保您的时区是正确的,对于我来说,在Windows 7 64位上,当时区错误时,它的行为非常奇怪(我现在正在与数据库中的时间和照片中的exif元数据进行比较)。例如:date_default_timezone_set('Europe/Oslo')

并浏览“用户贡献笔记”的其余部分

  • 另一个可能的原因是服务器的位置与“您”在“地球”上的位置不同
RiggsFolly评论中的相关链接:

这可能在这里起作用


编辑:

在注意到OP接受此答案后,从RiggsFolly的评论中摘取,并添加:

date_default_timezone_set('UTC');

我会称之为合资企业,我不能完全相信这一点。

有趣的是,它给了我
1个月29天
,这正是我所期望的,为什么你会想要
2个月
的结果,而这两个日期之间没有2个月的时间???@RiggsFolly够奇怪的;如果不使用默认时区,我也将在5.6.24获得
2个月1天
。使用
date\u default\u timezone\u set(“美国/纽约”)时我回来
1个月29天
-所以这是这个问题的可能答案。@Fred ii-:)我只是想玩一下时区,因为我刚刚注意到,如果我使用日期\默认值\时区\设置(“美国/纽约”),时钟会发生变化;然后显示2,但带有日期的实际时区\默认\时区\设置('非洲/内罗毕');它仍然显示了3个问题,您和OP的
date.timezone=“???”
在您的
php.ini
文件中设置为什么。@RiggsFolly我对答案进行了编辑,我不知道,因为他们可能不是我的邻居;-)我认为这回答了“UTC”事件上的“RiggsFolly Good show”问题;我编辑了答案,这也给了你荣誉;谢谢你;-)Ta,不需要信用卡。可以称之为“国际团队合作”或“跨水之手”