date_default_timezone_set产生了奇怪的结果,给出了什么?

时间:2016-08-07 11:48:41

标签: php date timezone

我需要将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。 发生了什么事?

1 个答案:

答案 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;