无法转换数据库值“”;1876-01-01 00:00:00-00:00:00“;到条令类型日期时间


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

为什么Doctrine不喜欢旧日期?

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

那么,条令有问题吗?

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

来自PHP手册:

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

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