无法将数据库值“1876-01-01 00:00:00-00:00:00”转换为Doctrine Type datetime

时间:2013-02-05 13:34:04

标签: php postgresql datetime doctrine-orm

为什么教条不像旧约会?

Exception was thrown : Could not convert database value "1876-01-01 00:00:00-00:00:00" to Doctrine Type datetime

另一个:

Exception was thrown : Could not convert database value "0000-00-00 00:00:00-00:00:00" to Doctrine Type datetime

在我的实体中,我会覆盖datetimedatetimetz

Type::overrideType('datetime', 'Doctrine\DBAL\Types\VarDateTimeType');
Type::overrideType('datetimetz', 'Doctrine\DBAL\Types\VarDateTimeType');

如果我将日期更新为1976-01-01 00:00:00-00:00:00,则可以正常使用。

更新:

所以我正在运行Ubuntu 12.04 64位,我也知道我的64位time_t正在运行这些测试:

  

strtotime()在运行的32位和64位系统上产生不同的输出   PHP 5.3.3(如前所述)。这会影响“零日期”   (“0000-00-00 00:00:00”)以及传统32以外的日期   日期范围。

试验:

strtotime("0000-00-00 00:00:00") returns FALSE on a 32 bit system.
strtotime("0000-00-00 00:00:00") returns -62169955200 on a 64 bit system.

执行echo strtotime("0000-00-00 00:00:00");时我得到了这个:

php time_test.php -62169966000

Doctrine也有问题吗?

1 个答案:

答案 0 :(得分:2)

PHP中的时代是1970年或1901年,具体取决于您的系统。

从PHP手册:

  

时间戳的有效范围通常来自1901年12月13日星期五   20:45:54 GMT到星期二,2038年1月19日03:14:07 GMT。 (这些是日期   对应于32位带符号的最小值和最大值   整数)。但是,在PHP 5.1.0之前,这个范围是有限的   某些系统(例如Windows)上的01-01-1970至19-01-2038。

http://php.net/manual/en/function.date.php