Php 使用DateTime类计算日期差异时出错
我试图使用类DateTime(php>=5.3)来计算与2 date的差异 手册中的例子简单明了,我尝试过这个例子,效果很好。 但如果更改开始和结束日期,则会出现问题:Php 使用DateTime类计算日期差异时出错,php,datetime,intervals,Php,Datetime,Intervals,我试图使用类DateTime(php>=5.3)来计算与2 date的差异 手册中的例子简单明了,我尝试过这个例子,效果很好。 但如果更改开始和结束日期,则会出现问题: $this->start_date = '2011-03-01'; $this->end_date = '2011-03-31'; var_dump($this->start_date, $this->end_date); $dateti
$this->start_date = '2011-03-01';
$this->end_date = '2011-03-31';
var_dump($this->start_date, $this->end_date);
$datetime1 = new DateTime($this->start_date);
$datetime2 = new DateTime($this->end_date);
$interval = $datetime2->diff($datetime1);
echo $interval->format('%a total days')."\n";
echo $interval->format('%m month, %d days');
输出为:
30 total days //ok
1 month, 2 days //no! i think it should be 0 month, 30 days
3月份的情况不太好!:) 二月不是有28天吗?出于某种原因,它可能会选择2月份作为“月份”单位。该方法的PHP文档似乎表明这种情况很容易发生。说“x个月”并没有多大用处,因为一个月不是一个固定的单位,它可以是28天、29天、30天或31天 从下面摘录 DateInterval::format()方法不支持 不重新计算中的结转点 时间字符串或日期段。 这是意料之中的,因为事实并非如此 可能会溢出值,如“32 “天”,可解释为 从“1个月零4天”到 “一个月零一天”
我的电脑显示总共有6015天,
1个月,2天
。有趣的…:D@Czechnology也许这是一个28天的三月!:D我没有试过其他月份,只有Jan,它工作得很好,就像手动示例。我做了一些测试,将日期设置为其他月份,在我看来,某处似乎有一个bug。3月被认为是28天,4月被认为是31天。因为一个月不是一个固定的单位,所以它不需要为给定的情况修正计算。不管怎么说,我是这么看的。我试过从2011-01-01到2011-01-31的1月份,结果是0个月,30天……我并不是说它一定会假设一个月是28天(尽管在主要问题的例子中看起来是这样的)。。。我想说的是,他们在文件中承认这种转换是不准确的。在我看来,最好避免。谢谢你的帮助!我想要间隔的天数,幸运的是它工作得很好(格式(%a))…我不明白为什么Jan工作得很好,而其他的不行…只是出于好奇!)我也不知道,但是如果没有它的源代码,我们永远都不可能知道。如果你包括一月和二月,它会说什么。。。一个月30天,两个月59天。。。那么,如果你将2个月和1天与2个月和1天进行比较,它们是否应该不相等,因为月份的长度不同?有点雷区真的。。。我想,只要去几天就可以避免,干得好:)