カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

日付の加算・減算 DateTimeクラス

この記事は最終更新日から1年以上経過しています。

date関数とstrtotime関数で日付の加算・減算ができます。
同じようにDateTimeクラス・DateIntervalクラスを使っても実現できます。

まずはオブジェクトを生成します。

$date = new DateTime('2000-01-01');

10時間と30秒を加算してみます。

$date->add(new DateInterval('PT10H30S'));

表示書式を指定して出力します。

echo $date->format('Y-m-d H:i:s');

出力は以下のようになります。

2000-01-01 10:00:30

今度は7年、5ヶ月、4日、4時間、3分、2秒を加算してみます。

$date->add(new DateInterval('P7Y5M4DT4H3M2S'));


表示書式を指定して出力します。

echo $date->format('Y-m-d H:i:s');

出力は以下のようになります。

2007-06-05 04:03:02

月を加算するときの注意点は、「31日を加算する」というところです。
例えば次のような例では

$date = new DateTime('2000-12-31');
$interval = new DateInterval('P1M');

$date->add($interval);
echo $date->format('Y-m-d') . "\n";

$date->add($interval);
echo $date->format('Y-m-d') . "\n";

出力は以下のようになります。

2001-01-31
2001-03-03

次に減算してみましょう。

10時間と30秒を減算してみます。

$date->sub(new DateInterval('PT10H30S'));
echo $date->format('Y-m-d') . "\n";

出力は以下のようになります。

1999-12-31 13:59:30

DateIntervalの書式について

頭の「P」はperiod(期間)という意味で、続けて「年月日(7Y5M4D)」と指定します。
時間を表す場合は頭に「T」を付けて「時分秒(4H3M2S)」と指定します。
週も指定することができます。その場合は「2W」と指定します。

この記事がお役に立ちましたらシェアお願いします
2,582 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です