【问题标题】:Difference between two dates in months in phpphp中两个日期之间的差异
【发布时间】:2017-03-15 11:40:25
【问题描述】:

我试图找出两个月之间的差异。例如下面,我想要 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 天的时间。

【问题讨论】:

  • 有趣的是,它给了我1 months 29 days 这是我所期望的
  • 当这些日期之间没有 2 个月的时间时,您为什么想要 2 months 的结果??
  • @RiggsFolly 很奇怪;如果不使用默认时区,我也会在 5.6.24 上收到2 months1 days。使用date_default_timezone_set('America/New_York'); 时,我会返回1 months29 days - 所以这是这个问题的可能答案。
  • @Fred-ii- :) 我只是想玩时区,因为我刚刚注意到日期是在时钟改变的时候
  • 如果我使用 date_default_timezone_set('America/New_York');然后它显示 2 但我的实际时区为 date_default_timezone_set('Africa/Nairobi');它仍然显示 3

标签: php date timezone date-difference


【解决方案1】:

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

在添加和例如:

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 提供的 cmets 的相关链接:

这可能在这里发挥作用。


编辑:

在注意到 OP 接受了这个答案后,从 RiggsFolly 的评论中摘取的还补充道:

date_default_timezone_set('UTC');

我认为这是一家合资企业,但我不能完全相信这一点。

【讨论】:

  • 问个问题,你的和 OP 的 date.timezone ="???" 在你的 php.ini 文件中设置为什么。
  • @RiggsFolly 我对答案进行了编辑,但我不知道,因为他们可能不是我的邻居;-)
  • 我认为这回答了问题stackoverflow.com/questions/19755820/…
  • @RiggsFolly 关于“UTC”的好节目;我编辑了答案,也给了你荣誉;谢谢你;-)
  • Ta,不需要信用。将其称为“国际团队合作”或“跨水之手”
猜你喜欢
  • 2011-05-16
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2013-10-02
  • 2012-01-15
相关资源
最近更新 更多