PHPで日付、時刻計算

PearにもDateクラスがあるが、PHP5にはDateTimeクラスという便利なものがデフォルトで用意されてた。
知らなかったよ、ママン。これでmktime()とはおさらばだ。

$dt = new DateTime();  // 呼び出し時の日時が格納される
echo $dt->format('Y-m-d H:i:s');

$dt->modify('+1 day');  // 一日進む
echo $dt->format('Y-m-d H:i:s'); 

$dt->modify('-1 month');  // 一ヶ月戻る
echo $dt->format('Y-m-d H:i:s');  

$dt = new DateTime('2008-03-02');  // 指定日時で初期化することも可能

DateTime()の初期化に使える文字列はstrtotime()と同じ。
format()に使える文字列はdate()と同じ。
modify()に使える文字列はstrtotime()と同じ。

大文字小文字も意識せず、月日時間の単語も省略系でいけたり結構ファジーに対応している。

DateTime()の初期化で使える文字列の例

2008-03-02 18:33:45 基本形
2008-3-2 月日の頭のゼロは省略可能
8:3:5 時分秒の頭のゼロは省略可能、年月日は当日が指定される
3/2 18:33 年と秒も省略可能、年月日の区切りはスラッシュも可
Sun, 2 Mar 2008 18:33:45 RFC2822形式
Sun Mar 2 18:33:45 UTC 2008 こんなのも可能
@1204482825 エポック秒(1970-01-01 00:00:00からの経過秒)
now 呼び出した時刻
today 呼び出した当日の00:00:00
tommorow 次の日の00:00:00
yesterday 前の日の00:00:00
next Sat 次の土曜の00:00:00
last month 'now - 1 month' に相当

modify()に使える文字列の例

+1 day 一日進める(時分秒は維持)
next month 次の月に進める(時分秒は維持)
last week 一週間前に戻す(時分秒は維持)
3 years 単位は複数系でもいい、+は省略も可能
+1 hour -3 minutes 32 second 組み合わせることも可能