気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHP関数
  2. 14 view

日付・時刻関数の2038年問題

 従来からあるdate関数などの日付・時刻関数は、32ビットコンピュータでは2038年頃に限界がきます。「PHP入門」という点では今すぐ大問題になるわけではありませんが、実社会ではもう少し早く問題が発生する場合があります。

<?php
for ($i = 2147483640; $i < 2147483650; $i++) {
echo date("Y/m/d H:i:s", $i) . "<br />";
}
?>

○実行結果

2038/01/19 12:14:00
2038/01/19 12:14:01
2038/01/19 12:14:02
2038/01/19 12:14:03
2038/01/19 12:14:04
2038/01/19 12:14:05
2038/01/19 12:14:06
2038/01/19 12:14:07
1901/12/14 05:45:52
1901/12/14 05:45:53

 PHP5から使用可能なdate_create関数やdate_format関数を使用すると、この問題に対処することができます。

<?php
$d = date_create("2050/12/31"); // 日付の作成
echo date_format($d, "Y/m/d") . "<br />";

$d->add(new DateInterval('P5D')); // 日付の加算
echo date_format($d, "Y/m/d") . "<br />";

$d = date_create("NOW");
echo date_format($d, "Y/m/d") . "<br />";

$d = date_create("+ 1 DAY");
echo date_format($d, "Y/m/d") . "<br />";
?>

2行目で作成したDateTimeオブジェクトは2050年の日付で、2038年を過ぎても使えることがわかります。5行目で日付を加算しています。「P5D」は日付間隔を示すDateInterval オブジェクトを作成するときに指定する間隔指示子で、ここでは5日(period・5days)を指しています。2038年を過ぎていますが、日付の加算も問題なく行われることがわかります。

○実行結果

2050/12/31
2051/01/05
2012/08/31
2012/09/01

詳しくは、PHPマニュアルを参照してください。

○PHPマニュアル
[manual func=”date_create”] — DateTimeオブジェクトを作成する
[manual func=”date_add”] — DateTimeオブジェクトに日付や時刻を加算する
[manual func=”date_format”] — 日付や時刻に書式を付ける

PHP関数の最近記事

  1. mb_send_mail関数でReturn-Pathを設定する方法

  2. is_numeric関数とis_int関数の違い

  3. PHPのdate関数の使用例

  4. isset関数とempty関数と「!」の違い

  5. 文字列を分割して配列を作成するexplode関数

関連記事

PAGE TOP