phpの時間の比較

2017.1.13 (金)

プログラミングをやっていると殆どの仕様に時間云々が入ってくるのですが、むかしのプログラミング言語(という言い方もおかしいですが)エポック秒に換算して比較計算なんてことになっていて比較的面倒な作業でしたがphpは楽ですよ。strtotime()という関数がそこらあたりをまとめてやってくれるのです。

日付で比較する

$dtobj = new DateTime();
$dtobj->setTimeZone(new DateTimeZone('Asia/Tokyo'));
$today = $dtobj->format('Y-m-d');

$target_day = '2015-06-07';
// 日付を比較
if (strtotime($target_day) > strtotime($today)) {
    echo '未来';
} else if (strtotime($target_day) < strtotime($today)) {
    echo '過去';
} else if (strtotime($target_day) == strtotime($today)) {
    echo '今日';
} else {
    echo '??????';
}

$target_dayのフォーマットを壊してやってみるとelseに行かないで殆どの場合過去になってしまいます。
phpが自動的に何らかの計算をしてエポックスタンプが少なめになっているんだろうなと思います。ここら辺りが便利なんだか弱点なんだかよくわかません。

秒単位の時間で比較する

秒単位の時間まで設定するとこんな感じ

$dtobj = new DateTime();
$dtobj->setTimeZone(new DateTimeZone('Asia/Tokyo'));
$current_time = $dtobj->format('Y-m-d H:i:s');

// 比較する日付と時間を設定
$target_time = '2015-06-07 11:29:55';
// 日付を比較
if (strtotime($target_time) > strtotime($current_time)) {
    echo '未来';
} else if(strtotime($target_time) < strtotime($current_time)) {
    echo '過去';
} else if(strtotime($target_time) == strtotime($current_time)) {
    echo '今';
} else {
    echo '?????';
}

1日の時間帯で比較する

時間帯で比較するのだったらstrtotime()ではなく普通にdate関数を使った方がやさしい。
if (date("H") >= 6 and date("H") <= 11) {
    echo "6:00 - 11:59";
} elseif (date("H") >= 12 and date("H") <= 17) {
    echo "12:00 - 17:59";
} else {
    echo "18:00 5:59";
}