炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

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 関数 は、タイムスタンプというコンピューターの世界での時間に変換する関数