【DateTimeクラス】PHPで現在時刻を表示したり加算したりしてみよう【初心者向け】

PHP PHP

当ブログでも度々でてくるstrtotime関数ですが、実はこの関数は問題を抱えていて、
2038年になるとプログラムの動作環境によって不具合が発生します。
どういうことか簡単に書くと、下記のようになります。

  • strtotimeは1970年からの通算秒を取得する関数
  • プログラムの動作環境が32bitマシンだと、戻り値(秒)は4バイト
    (1バイト=8ビットなので、4バイト)
    ※詳しく知りたい方はググってみてください。
  • 4バイトが表現できる数値は、2,147,483,647(秒)
  • 2,147,483,647秒は、約38年
    (2,147,483,647(秒)÷60÷60÷24÷365)
  • 結果、1970年+38年=2038年が上限

意外と2038年は遠いようで近いので、何とか回避する方法を見つけなくてはなりません。
それが、今回のDateTimeクラスです。

DateTimeクラスを使って日付を取得・表示するサンプルコード

さっそく、サンプルコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>DateTimeの勉強</title>
</head>
<body>
<?php
    //引数無しで、今日の日付でフォーマットしたインスタンスを作成する。
    $DateTime_today = new DateTime();
    
    //DateTimeクラスのformatメソッドで、DateTime_todayインスタンスの日付を表示できる。
    print 'インスタンスを作成(日付指定なし) ⇒ '.$DateTime_today->format('Y-m-d').'<br>';
    
    //今日の日付に1日加算する。
    $DateTime_today->modify('+1 day');
    
    //DateTimeクラスのformatメソッドで、DateTime_todayインスタンスの日付を表示できる。
    //13行目の表示の次の日となる。
    print 'インスタンスに一日加算 ⇒ '.$DateTime_today->format('Y-m-d').'<br>';
    
    //日付を指定してDateTime_todayインスタンスを作成。
    $DateTime_today = new DateTime('2040-01-23');
    print '2040-01-23でインスタンス作成 ⇒ '.$DateTime_today->format('Y-m-d').'<br>';
    print '加算も問題なし ⇒ '.$DateTime_today->modify('+1 day')->format('Y-m-d').'<br>';
    
    //今月初めを指定してインスタンスを作成。
    $DateTime_today = new DateTime('first day of this month');
    
    //今月末日を指定して変数作成。
    $DateTime_end = $DateTime_today->format('Y-m-t');
    
    //$DateTime_today->format('w')で表示できるように曜日文字列を配列で用意
    $youbi = ['(日)','(月)','(火)','(水)','(木)','(金)','(土)'];
    
    print '--- 今月一覧 ---<br>';
    //今月の1日から月末まで表示
    for( ; $DateTime_today->format('Y-m-d')<=$DateTime_end; $DateTime_today->modify('+1 day'))
        print $DateTime_today->format('Y/m/d').$youbi[$DateTime_today->format('w')].'<br>';
    print '----------------<br>';

?>
</body>
</html>

このファイルをphpが動作する環境で表示してみてください。

DateTimeの実行結果

このように、問題なく日付を表示することができました。

タイトルとURLをコピーしました