【问题标题】:PHP `DateTime::days` returns trash?PHP `DateTime::days` 返回垃圾?
【发布时间】:2011-06-23 10:29:17
【问题描述】:

PHP 类DateInterval 有一个属性“天”。根据手册,它返回 “间隔跨越的总天数。如果未知,天数将为 FALSE。”

在我的例子中,代码:

$d = new DateInterval('P1Y'); 
echo $d->days;

返回-99999

还有这样的代码

$a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
$b = DateTime::createFromFormat("d.m.Y", "03.01.2010");

$d = $b->diff($a);
echo $d->days;

返回6015

我是不是误会了什么?

【问题讨论】:

    标签: php datetime php-5.3


    【解决方案1】:

    DateInterval 在 Windows 平台上是错误的。见bug #51183。官方的回答似乎是“暂时使用 VC9 构建”。

    【讨论】:

    • 该错误是一年前报告的,他们将其标记为“无法修复”,因为“这不是我们可以轻易修复的东西”。他们生病了吗!?
    【解决方案2】:

    我只是运行您的示例,它们应该可以工作。具体来说,我得到了:

        $d = new DateInterval('P1Y');
        var_dump($d->days);
        // result: int 0
    
    
        $a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
        $b = DateTime::createFromFormat("d.m.Y", "03.01.2010");
    
        $d = $b->diff($a);
        var_dump($d->days);
        // result: int 2
    

    我在 Linux Mint 10 上运行 XAMPP for Linux 1.7.3a 和 PHP 5.3.1。

    【讨论】:

      【解决方案3】:

      你能告诉我你需要的确切解决方案吗...

      我已经使用了下面的代码,

      $interval = new DateInterval('P2Y4DT6H8M');
      

      echo $interval->d;

      它给出 o/p 为 4

      如果我这样使用,

      $interval = new DateInterval('P2Y');
      
      echo $interval->d;
      

      它给出 o/p 为 0

      所以它将返回您在 Dateinterval() 中给出的日期,否则它将返回零..

      请告诉我你的确切要求........ :)

      【讨论】:

      • 我说的不是“->d”,而是“->days”。根据手册,它必须是总天数,但不是……至少在 Windows 中不是。
      猜你喜欢
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2018-10-19
      • 2014-12-04
      • 2015-06-27
      相关资源
      最近更新 更多