Aug 28

逆引きrhaco50: timestampの制限を超えて日付を扱う

逆引きもやっと50になりました。だからと言ってやることは全然変わりません。

timestampは有効な範囲が1900年代程度からと決まっています。

有効なタイムスタンプの範囲は、通常 Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです (これらの日付は、32 ビット符号付き整数の最小および最大値に 対応します)。 しかし、PHP 5.1 より前のバージョンでは、システム環境によっては (例: Windows) この範囲が 1970 年 1 月 1 日から 2038 年 1 月 19 日 までに制限されます。
(PHPマニュアル(date関数)より)

その範囲を超えた日付を扱いたい場合、rhacoでは

DateUtil::parseIntDate()
DateUtil::formatDate()

を使用できます。これらのメソッドでは日付を20080828の様な整数で扱うので、原理的にはどのような日付でも大丈夫です。

$intDate = DateUtil::parseIntDate('2008/8/28');
$intDate = DateUtil::parseIntDate('2008-8-28');
$intDate = DateUtil::parseIntDate('2008/08/28');
$intDate = DateUtil::parseIntDate('2008-08-28');
//全て$intDate === 20080828となる

ただし、DateUtilに用意されている日付を比較するメソッド(eq, qtなど)は使えません。整数値なので普通に大小比較すれば良いと思います。

この値を日付に戻すコードは
$textDate = DateUtil::formatDate(20080828);
//$textDate === '2008/08/28'となる


となります。

| comment(0)