【问题标题】:DateTime->diff() crashesDateTime->diff() 崩溃
【发布时间】:2011-10-06 07:14:01
【问题描述】:

我有几行 PHP 应该可以工作,但不行:

$date1=new DateTime();
$date2=new DateTime();

$interval=date_diff($date1,$date2);

$interval=$date1->diff($date2);

我什至从 DateTime Docs 中复制了示例:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

输出为空白,当我调试时,调试器在 diff 行断开连接,没有任何错误消息。 PHP 版本 5.2.9 中是否有任何已知错误或其他人看到过这种行为?

除了更新 PHP 版本之外,我目前不知道要尝试什么。但目前我不想更新所有客户...

每一点都有帮助...谢谢!

【问题讨论】:

  • 奇怪。这对我来说可以。结果:“+6015 天”

标签: php datetime datediff


【解决方案1】:

DateTime:Diff() 仅适用于 PHP >= 5.3.0。

不确定为什么您的调试器会完全退出 - 它应该抱怨未声明的方法。也许您需要调整错误报告设置?

【讨论】:

  • 谢谢,就是这样......即使有error_reporting(E_STRICT|E_ALL);没有错误显示。 :-(
【解决方案2】:

对我来说似乎很合适。 可以试试吗

date_default_timezone_set('Europe/London');
$date1 = new DateTime('2009-10-11');
$date2 = new DateTime('2009-10-13');

$time1 = $date1->format('Y-m-d');
$time2 = $date2->format('Y-m-d');

$difference = abs(strtotime($time1)-strtotime($time2));

$difference/= 3600*24;

print $difference.' days';

【讨论】:

  • 请注意,在 32 位系统上,基于时间戳的 strtotime() 会受到 year 2038 problem 的影响,而 DateTime(内部使用 64 位日期)则不会。混合使用这两个库只能作为最后的手段(即,如果无法升级到 PHP 5.3)
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多