为什么在计算没有指定时区的时间戳时,PHP会在特定日期上分配不同的时区?

12 浏览
0 Comments

为什么在计算没有指定时区的时间戳时,PHP会在特定日期上分配不同的时区?

当我想计算日期之间的天数差异时(以date1和date2为例):

$date1 = '2019-03-27';

$date2 = '2019-04-01';

echo((strtotime($date2) - strtotime($date1)) / 86400);

结果是:

2

然而,使用相同的方法:

$date1 = '2019-03-27';

$date2 = '2019-04-01';

echo((strtotime($date2) - strtotime($date1)) / 86400);

返回:

4.9583333333333

这可以通过使用date_default_timezone_set('UTC')来修复。

但是为什么PHP默认情况下在某些日期上不使用相同的时区?

0
0 Comments

这个问题的出现是因为在某个时区,冬令时与夏令时之间发生了变更。这个变更通常发生在三月底的某个时候,导致其中一天只有23个小时,而不是正常的24小时。因此,在计算时间戳时,PHP会分配不同的时区。

解决这个问题的方法是使用PHP的DateTime类,并明确指定时区。以下是使用DateTime类解决这个问题的示例代码:

$date = new DateTime('2019-03-31', new DateTimeZone('Your Timezone'));
$timestamp = $date->getTimestamp();

通过使用DateTime类,我们可以明确指定时区,确保在计算时间戳时没有出现不一致的情况。

0