为什么在计算没有指定时区的时间戳时,PHP会在特定日期上分配不同的时区?
为什么在计算没有指定时区的时间戳时,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默认情况下在某些日期上不使用相同的时区?
这个问题的出现是因为在某个时区,冬令时与夏令时之间发生了变更。这个变更通常发生在三月底的某个时候,导致其中一天只有23个小时,而不是正常的24小时。因此,在计算时间戳时,PHP会分配不同的时区。
解决这个问题的方法是使用PHP的DateTime类,并明确指定时区。以下是使用DateTime类解决这个问题的示例代码:
$date = new DateTime('2019-03-31', new DateTimeZone('Your Timezone')); $timestamp = $date->getTimestamp();
通过使用DateTime类,我们可以明确指定时区,确保在计算时间戳时没有出现不一致的情况。