1

为什么 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() 在运行 PHP 5.3.3 的 32 位和 64 位系统上产生不同的输出(如前所述)。这会影响“零日期”(“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

那么Doc​​trine有问题吗?

4

1 回答 1

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

于 2013-02-05T13:38:19.147 回答