【发布时间】:2020-10-14 12:12:25
【问题描述】:
可能只是我很笨,但是...
<?php
$startDate = date_create('2019-11-01');
$endDate = date_create('2019-12-01');
$interval = date_diff($startDate, $endDate);
var_dump($interval);
?>
在PHPfiddle 中给出(如预期的那样):
对象(DateInterval)#3 (15)
{ ["y"]=> int(0)
["m"]=> int(1) ["d"]=> int(0)
["h"]=> int(0)
["i"]=> int(0)
["s"]=> int(0)
["工作日"]=> int(0)
["weekday_behavior"]=> int(0)
["first_last_day_of"]=> int(0)
[“反转”]=> int(0)
["天"]=> int(30)
["special_type"]=> int(0)
["special_amount"]=> int(0)
["have_weekday_relative"]=> int(0)
["have_special_relative"]=> int(0) }
查看m 的值,即月数。
但是,在我的本地机器上,相同的代码给出:
class DateInterval#4 (16) {
public $y =>
int(0)
public $m =>
int(0) <====== why ??!!
public $d =>
int(30)
public $h =>
int(0)
public $i =>
int(0)
public $s =>
int(0)
public $f =>
double(0)
public $weekday =>
int(0)
public $weekday_behavior =>
int(0)
public $first_last_day_of =>
int(0)
public $invert =>
int(0)
public $days =>
int(30)
public $special_type =>
int(0)
public $special_amount =>
int(0)
public $have_weekday_relative =>
int(0)
public $have_special_relative =>
int(0)
}
好的,我承认是 30 天,但我正在寻找的答案是 1 个月,$interval->m 是 zer0。
我错过了什么?我不知道PHPfiddle网站使用的是什么版本的PHP,但我在本地使用的是7.3.11。
【问题讨论】:
-
PHPFiddle 运行 5.6.40
-
我想说您在较新的 PHP 中发现了一个错误。具有两个不同月份值的日期之间的差异应返回具有非零月份字段的间隔...
-
FWIW,表示“月”中的任何时间增量都被定义破坏,因为一个月的长度没有单一的定义值...... :) 不是你的错,主要是PHP 的错……
-
现在,这不是真的。日历月的长度不是固定不变的,但它在日常生活中无处不在。连续几个月的同一日期之间的差异是一个月的差异,无论是 28、29、30 还是 31 天。能够根据
date_diff返回的这些分解值计算增量非常有用,因为日历月(和年)不会转换为固定的天数;如果所有月份的长度都相同,您可以以天为单位得到增量并除以。 -
@deceze:我学习日历是一种爱好;你没有告诉我任何我不知道的事情。 :) 我只是说,在日常生活中,我们有合同、租金和信用卡计费间隔以及以月为单位指定的东西。边缘情况将是边缘情况,但实用程序仍然存在。
标签: php