好的,这绝对是一个PHP 7错误。我的问题是:你知道任何可靠的解决方法吗?
$date1 = new DateTime('2017-10-14', new DateTimeZone('America/Sao_Paulo'));
print_r($date1);
print_r('<br/>');
print_r('<br/>');
$date2 = new DateTime('2017-10-15', new DateTimeZone('America/Sao_Paulo'));
print_r($date2);
print_r('<br/>');
print_r('<br/>');
$date3 = new DateTime('2017-10-16', new DateTimeZone('America/Sao_Paulo'));
print_r($date3);
这会让我每天午夜,对吧?错。
DateTime Object ( [date] => 2017-10-14 00:00:00.000000 [timezone_type] => 3 [timezone] => America/Sao_Paulo )
DateTime Object ( [date] => 2017-10-15 01:00:00.000000 [timezone_type] => 3 [timezone] => America/Sao_Paulo )
DateTime Object ( [date] => 2017-10-16 00:00:00.000000 [timezone_type] => 3 [timezone] => America/Sao_Paulo )
现在是15日凌晨一点。将偏移量设置为 -2 并增加一小时。它总是发生在 15 日。Phpversion 是 7.0.22
我真的需要能够可靠地找到午夜! :)
现在是15日凌晨一点... 我真的需要能够可靠地找到午夜!
你不能。 2017年10月15日圣保罗没有当地午夜。 它不存在。 随着当地时间接近午夜,它提前到凌晨 1:00 开始夏令时。 以微秒为单位计算,它如下:
..
2017-10-14 23:59:59.999998 UTC-03:00 (BRT)
2017-10-14 23:59:59.999999 UTC-03:00 (BRT)
2017-10-15 01:00:00.000000 UTC-02:00 (BRST)
2017-10-15 01:00:00.000001 UTC-02:00 (BRST)
...
有关可视化,请参阅此站点。