phpで日付の計算(加算)を行う【mktime】
phpで日付の計算をする場合には注意が必要です。
$a = 100;
$b = 300;
$c = $b - $a;
echo $c;
上記結果を実行すると、echo $c; の出力結果は
200
となる。当然ですね。
同じように、日付も計算できると思って処理を進めていたら、思わぬ落とし穴に。
$date_now = date("Y-m-d");
$date_add = date("2010-04-18");
$date_test = $date_add - $date_now;
echo $date_test;
echo $date_now; の出力結果
2010-04-15 … 現在の日付と時刻
echo $date_add; の出力結果
2010-04-18
echo $date_test の出力結果
0
php ではdate関数で定義した日付型のデータの計算は通常では行えないみたいです。
データ型が関係しているのか…。只今勉強中です。*1
そこで、phpで日付を計算するのに活躍するのが、mktime関数です。*2
$date_now = mktime (0, 0, 0, date("m"), date("d"), date("y")); … 【1】
// ※現在の日付は2010-04-15
$date_add = mktime (0, 0, 0, 4, 18, 2010);
$date_test = $date_add - $date_now; … 【2】
echo $date_test/86400; … 【3】
【1】 計算ができるようにmkdir関数で日付をタイムスタンプに直す
「2006年1月1日0時0分0秒」を mktime 関数 を使ってタイムスタンプに直すと、
echo mktime(0,0,0,1,1,2006); //時・分・秒・月・日・年、の順
出力結果:1136041200
【2】 数値の引き算と同じ要領で計算
【3】 86400は1日を秒に直したもの(1日 = 24時間 = 1440分 = 86400秒)
echo $date_test/86400; の出力結果
3
また、日付の加算は下記のように行えます。
$date_today = mktime (0, 0, 0, date("m"), date("d"), date("y"));
$date_yesterday = $date_today - 86400;
echo date('y-m-d', $date_yesterday);
計算後、date関数でフォーマット変換をしてください。
1:※データ型:コンピュータにおけるデータの扱いに関する形式
2:mktime 関数 は、タイムスタンプというコンピューターの世界での時間に変換する関数