kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

PHPの日付判定について考える(2)

日付の出力

現在の日付表示用
$now = date("Y-m-d H:i:s");

現在のタイムスタンプ
$time = time();

日付の比較

strtotime

比較の式はtimestampならすぐに理解できた。

ただの数字なので、とても比較としてはわかりやすい。

if ( $time >= strtotime('2014-06-02') ) {

   // 2014年6月2日以降
} else {

   // 2014年6月2日より前
}

日付の比較(指定日からある時間後の比較)

ある特定の時間から2時間前を比較(ここで悩んだ。)
strtotimeの使い方の実例にないから困った
単純に文字列としてはいっていればよかったっぽい。

strtotime('2014-06-02 12:00:00 +1 day');

 

その他試してみた

date('Y-m-d H:i:s', strtotime('2014-06-02 12:35:59 +1 day')); // 相対指定(後)
date('Y-m-d H:i:s', strtotime('+1 day 2014-06-02 12:35:59')); // 相対指定(前)
date('Y-m-d H:i:s', strtotime('2014-06-02 +1 day 12:35:59')); // 相対指定(中)
date('Y-m-d H:i:s', strtotime('2014-06-02 12:35:59 +27 hour')); // 24時間以上
date('Y-m-d H:i:s', strtotime('2014-06-02 12:35 +27 hour'));  // 分まで
date('Y-m-d H:i:s', strtotime('2014-06-02 12 +27 hour'));  // 時間まで
date('Y-m-d H:i:s', strtotime('2014-06-02 +27 hour')); // 日付まで
date('Y-m-d H:i:s', strtotime('2014-06 +27 hour')); // 月まで
date('Y-m-d H:i:s', strtotime('2014 +27 hour')); // 年だけ
date('Y-m-d H:i:s', strtotime('2014-06-31'));  // 存在しない日付

出力結果

2014-06-03 12:35:59 // 相対指定(後)
2014-06-03 12:35:59 // 相対指定(前)(まぁ、できますね)
2014-06-03 12:35:59 // 相対指定(中)(え!できるんだ。)
2014-06-03 15:35:59 // 24時間以上(24以上でも問題ない)
2014-06-03 15:35:00 // 分まで(秒を消しても動作する)
1970-01-01 09:00:00 // 時間まで(さすがにエラーだ。)
2014-06-03 03:00:00 // 日付まで(時刻は00:00:00扱いだ)
2014-06-02 03:00:00 // 月まで(日付は1日と判断されてるっぽい)
2014-06-03 23:14:00 // 年だけ(月日と時刻は実行した時間が入る)
2014-07-01 00:00:00 // 存在しない日付(ある意味ちゃんと指定した日付だ)

 

秒だけ省略しても入らないのが、気になるけどいろいろあることに気がつきました。

こうやって冷静にまとめると、むずかしくなかったんだと感じます。

 

だだ、詰まった要因は他にもあるのでまた今度書きたいと思います。