解决方法在夏令时内找到Php7中的确切午夜

时间:2017-10-31 00:40:51

标签: php datetime timezone timezone-offset

好的,这绝对是一个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

我真的需要能够可靠地找到午夜! :)

1 个答案:

答案 0 :(得分:2)

  

这是15日早上的一个......   我真的需要能够可靠地找到午夜!

你做不到。 2017年10月15日 在圣保罗没有当地的午夜。它不存在。当当地时间接近午夜时,它向前移动到凌晨1点,开始夏令时。以微秒计数,它如下:

..
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)
...

有关可视化的信息,请参阅this site