Alt*_*PHP 25 php datetime date
这是一个测试代码:
<?php
ini_set('date.timezone', 'Europe/London');
$dt = new \DateTime('0000-00-00 00:00:00');
var_dump($dt);
Run Code Online (Sandbox Code Playgroud)
这提供:
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)
Run Code Online (Sandbox Code Playgroud)
而这不是有效日期.我不明白返回的价值,特别是月份......你能解释一下吗?
hak*_*kre 29
你在这里看到两种效果.第一个是您使用一种写作方式来创建可以多种形式编写的日期:
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
Run Code Online (Sandbox Code Playgroud)
所以到了日期本身,你已经指定了11月30日-1.
现在剩下的时间偏差大约相差9分21秒.这是因为与巴黎/法国的UTC相比,时钟的变化发生在1911年3月10日23:51:38/39当地时间.
我稍微修改了你的代码示例并引入了欧洲/巴黎设置,它正在发挥作用.这段代码也告诉Z您UTC()的秒数偏移量,这是您正在寻找的:
$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'));
Run Code Online (Sandbox Code Playgroud)
我稍微改变了日期
Fri, 10 Mar 1911 23:51:38 +0009 PMT (Europe/Paris) 561 secs offset from UTC
^^^
Run Code Online (Sandbox Code Playgroud)
一秒后:
Fri, 10 Mar 1911 23:51:39 +0000 WET (Europe/Paris) 0 secs offset from UTC
Run Code Online (Sandbox Code Playgroud)
当地标准时间即将到达1911年3月11日星期六时,00:01:00时钟倒退0:09:21到星期五,即1911年3月10日,当地标准时间23:51:39.
那是561秒.参考:巴黎的时钟变化 - 1911年的时间变更日期以及1900年至1924年之间的时区变化和夏令时开始/结束日期.
看起来错误处理DateTime不完整.通常,其他PHP函数将'0000-00-00'作为错误处理(无效日期).
DateTime应遵循相同的准则,但事实并非如此.此代码不会抛出异常,即使它应该:
try { $dt = new \DateTime('0000-00-00 00:00:00'); }
catch (Exception $e) { var_dump($e); }
var_dump($dt);
/* result:
object(DateTime)#1 (3) {
["date"]=>
string(20) "-0001-11-30 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
*/
Run Code Online (Sandbox Code Playgroud)
其他函数会将该输入视为错误:
var_dump(strtotime('0000-00-00 00:00:00')); // returns: bool(false)
Run Code Online (Sandbox Code Playgroud)
似乎PHP在处理这种情况时总是遇到问题.例如:Bug#30190,Bug#60288
引用PHP bug跟踪器中的注释:
0000-00-00是一个不存在的日期(01-01-0001之前的那一天是31/12/-0001)
| 归档时间: |
|
| 查看次数: |
11995 次 |
| 最近记录: |