我需要将date_default_timezone_set用于我的项目,直到我开始使用date_diff一切正常,因为它会根据所选的时区产生好的和错误的结果。 一个例子:
date_default_timezone_set('America/Los_Angeles');
$first = date_create("2016-10-01");
$last = date_create("2016-10-31");
$diff = date_diff($first, $last);
echo $diff->d;
结果是30,这是正确的。 现在,如果我将时区设置为欧洲:
date_default_timezone_set('Europe/London');
结果是0。 发生了什么事?
答案 0 :(得分:2)
如果您var_dump($diff)
,您会看到天数已重置为零,而月份已增加为1:
object(DateInterval)#3 (15) {
["y"]=>
int(0)
["m"]=>
int(1)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(30)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
这可能是因为London switches back from DST on the last Sunday in October。然而,日期差异的计算显然使其成为一个月"而不是30天。
您可以使用days
属性which is will report 30:
$first = date_create("2016-10-01");
$last = date_create("2016-10-31");
$diff = date_diff($first, $last);
echo $diff->days;