【问题标题】:How to get aggregate days from PHP's DateTime::diff?如何从 PHP 的 DateTime::diff 获取聚合天数?
【发布时间】:2010-03-25 20:49:31
【问题描述】:
$now = new DateTime('now');
$tomorrow = new DateTime('tomorrow');
$next_year = new DateTime('+1 year');

echo "<pre>";
print_r($now->diff($tomorrow));
print_r($now->diff($next_year));
echo "</pre>";

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 10
    [i] => 17
    [s] => 14
    [invert] => 0
    [days] => 6015
)

DateInterval Object
(
    [y] => 1
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 6015
)

任何想法为什么“天”显示 6015?为什么不显示总天数? 1 年的差异对我来说毫无意义,因为月份有不同的天数。

【问题讨论】:

  • 从来没有对我也没有用。
  • 此错误现已在最新版本的 PHP 中得到修复。

标签: php datetime


【解决方案1】:

更合适的错误报告是#51184,它侧重于 Windows 报告 6015 天的问题(非 Windows 似乎正常)。

对于 #49778 的修复(处理不同的问题)是否会影响此问题或问题是否仍然存在,目前尚未提供任何反馈。如果这里有人可以查看并提供一些反馈,那您将非常好。

【讨论】:

  • 我很困惑为什么他们宣称他们“不会修复”这个明显的错误......只是我自己遇到了。
  • 我在bugs.php.net/bug.php?id=51184 添加了一个相当不错的替代函数,如果它可以使用则使用本机函数,否则使用替代方法。
  • @fbas 错误跟踪系统不是发布变通方案脚本的地方,这里也不是宣传它们的地方。
【解决方案2】:

请升级到最新的php。此错误仅发生在 php 5.3 VC6 上。

【讨论】:

  • 迟到的答案审查:这个问题是两年前提出的,因此感谢您确认问题已得到解决。
【解决方案3】:
$now = new DateTime('now');

应该是

$now = new DateTime(''2010-01-01 00:00:00'');

手册中的更多内容 http://nl3.php.net/manual/en/datetime.diff.php

【讨论】:

【解决方案4】:

好的,看起来http://bugs.php.net/bug.php?id=49778 是这里的问题。

【讨论】:

    【解决方案5】:

    这是一个错误 http://bugs.php.net/bug.php?id=49778

    感谢您的错误报告。

    使用创建 DateInterval 时确实没有设置 Days 构造函数。一个复杂的问题是,不可能 确定指定月份或年份的天数,因为 这些长短不一。在某些地方可以填写天数字段 在其他情况下,将其保留为 0。在任何情况下,都应该记录在案 天字段并不总是可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多