date_default_timezone_set正在产生奇怪的结果,这是怎么回事



我需要为我的项目使用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。怎么回事?

如果您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)
}

这可能是因为伦敦在10月的最后一个星期天从夏令时改回了夏令时。然而,日期差异的计算显然使其成为一个"月",而不是30天。

您可以通过使用days属性来克服这一问题,该属性将报告30:

$first = date_create("2016-10-01");
$last = date_create("2016-10-31");
$diff = date_diff($first, $last);
echo $diff->days;

相关内容

  • 没有找到相关文章

最新更新