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

私のエンティティでは、オーバーライドdatetimeしてdatetimetz

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

Doctrineに問題がありますか?

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 に答える