跟踪错误的来源,我发现这段代码在开发和实时服务器中表现不同:
<?php
ini_set('log_errors', FALSE);
ini_set('display_errors', TRUE);
error_reporting(E_ALL ^ E_STRICT);
var_dump(date_default_timezone_set('Europe/Madrid'));
try{
$dt = new DateTime('2010-12-01');
var_dump($dt);
}catch(Exception $e){
var_dump($e);
}
Run Code Online (Sandbox Code Playgroud)
在我的开发框(PHP/5.3.0)中,我得到了预期的输出:
bool(true)
object(DateTime)#1 (3) {
["date"]=>
string(19) "2010-12-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Madrid"
}
Run Code Online (Sandbox Code Playgroud)
在实时服务器(PHP/5.2.14)中,我得到一个空白对象:
bool(true)
object(DateTime)#1 (0) {
}
Run Code Online (Sandbox Code Playgroud)
我已经丢弃了通常的嫌疑人(缺少默认时区,不可解析的日期字符串......).此代码在两个服务器中具有相同的输出:
<?php
ini_set('log_errors', FALSE);
ini_set('display_errors', TRUE);
error_reporting(E_ALL ^ E_STRICT);
var_dump(date_default_timezone_set('Europe/Madrid'));
$ts = strtotime('2010-12-01');
var_dump($ts, date('r', $ts));
Run Code Online (Sandbox Code Playgroud)
打印:
bool(true)
int(1291158000)
string(31) "Wed, 01 Dec 2010 00:00:00 +0100"
Run Code Online (Sandbox Code Playgroud)
我错过了一些非常明显的东西吗
用PHP 5.2你必须使用.
$date = new DateTime('2010-12-01');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
显然你不能在5.2版本的DateTime上做一个var_dump.可能与5.2中的类设置有关