3

PHPで2038年以降のローカライズされた日付を使用しようとしています

strftime はタイムスタンプを使用するため、2038 年以降は機能しません

DateTime はローカライズされていません...

だから私は DateTime で IntlDateFormatter を使用しようとします:

$d = DateTime::createFromFormat('Y-m-d', '2040-01-01');
$fmt = new IntlDateFormatter(
    'fr_FR',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'America/Los_Angeles',
    IntlDateFormatter::GREGORIAN
);
echo $fmt->format($d);    
echo $fmt->getErrorMessage();

ここで私が得るもの:datefmt_format:タイムスタンプを取得できません:U_ILLEGAL_ARGUMENT_ERROR

実際、IntlDateFormatter は内部的に日付をタイムスタンプに変換すると思います...

では、php で 2038 年以降の日付をローカライズするにはどうすればよいでしょうか。

4

1 に答える 1

2

ここでも同じ問題が発生しています。この問題は 32 ビット マシンで発生します。これは、フォーマッタが DateTime 値を整数のタイムスタンプに変更して処理するためです。エポック (1970) 以外の日付 +- maxint でエラーが発生します。これを修正するには 2 つの方法があります: 1 - 64 ビット サーバーを使用します。2 - PHP IntlDateFormatter を修正

私たちは1で行きます-ここで、頑張ってください!

(タイムスタンプの有効な範囲は通常、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 に制限されていました. Cf : http://php.net/manual/en /function.date.php )

于 2014-10-28T12:08:25.767 に答える