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 | 組み合わせることも可能 |