new DateTime返回空DateTime实例

时间:2011-01-03 13:01:15

标签: php datetime

跟踪错误的来源,我发现这段代码在开发和实时服务器中表现不同:

<?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);
}

在我的开发框(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"
}

在实时服务器(PHP / 5.2.14)中,我得到一个空白对象:

bool(true)
object(DateTime)#1 (0) {
}

我已经丢弃了通常的嫌疑人(缺少默认时区,不可解析的日期字符串......)。此代码在两个服务器中具有相同的输出:

<?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));

打印:

bool(true)
int(1291158000)
string(31) "Wed, 01 Dec 2010 00:00:00 +0100"

我错过了一些非常明显的东西吗?

2 个答案:

答案 0 :(得分:7)

使用PHP 5.2,你必须使用。

$date = new DateTime('2010-12-01');
echo $date->format('Y-m-d'); 

显然你不能在5.2版本的DateTime上做var_dump。可能与他们如何在5.2

中进行课程设置有关

答案 1 :(得分:0)

尝试使用5.1 / 5.2 php

上使用的这种解决方法
<?php
if (!class_exists('DateTime')) {
class DateTime {
public $date;

public function __construct($date) {
    $this->date = strtotime($date);
}

public function setTimeZone($timezone) {
    return;
}

private function __getDate() {
    return date(DATE_ATOM, $this->date);    
}

public function modify($multiplier) {
    $this->date = strtotime($this->__getDate() . ' ' . $multiplier);
}

public function format($format) {
    return date($format, $this->date);
}
}
}
?>