这是一个测试代码:
<?php ini_set('date.timezone', 'Europe/London'); $dt = new \DateTime('0000-00-00 00:00:00'); var_dump($dt);
提供:
object(DateTime)[1] public 'date' => string '-0001-11-30 00:00:00' (length=20) public 'timezone_type' => int 3 public 'timezone' => string 'Europe/London' (length=13)
但这不是一个有效的日期。我不了解返回的值,尤其是月份……您能解释一下吗?
您在这里看到两种效果。第一个是您使用一种可以以多种形式书写的日期书写方式:
0000-01-01 same as 0000-01-01 0000-01-00 same as -0001-12-31 0000-00-01 same as -0001-12-01 0000-00-00 same as -0001-11-30
因此,根据日期本身,您已经指定了11月30日-1。
现在剩下的时间偏移大约为9分21秒。这是因为与1911年3月10日当地时间发生的巴黎/法国UTC相比,时钟发生了变化。
我稍微修改了您的代码示例,并根据需要介绍了 Europe / Paris 设置,它发挥了作用。这段代码还说明Z了您要查找的与UTC()的偏移量(以秒为单位):
Z
$dt = new DateTime('0000-00-00 00:00:00', new DateTimeZone('Europe/Paris')); printf("%s secs offset from UTC\n", $dt->format('r T (e) Z'));
我改变了一下日期
Fri, 10 Mar 1911 23:51:38 +0009 PMT (Europe/Paris) 561 secs offset from UTC ^^^
一秒钟后:
Fri, 10 Mar 1911 23:51:39 +0000 WET (Europe/Paris) 0 secs offset from UTC
当当地标准时间即将到达1911年3月11日星期六时,将00:01:00时钟倒转到1911年3月10日(星期五)当地时间23:51:39。