[PHP] 日別処理がAM9:00に切り替わる時の日付取得方法

PHP
Webシステムを運営していると、デイリーバッチ処理というような定期処理を行う場合がある。 とあるシステムで、キャッシュデータを集計する処理があり、他のシステム連携の関係で、その集計処理だけ、AM9時以降に行こなうという仕様になっていた。 他のバッチ処理は、日付が切り替わる0:00のたイミングで実行されていて、そのままの日付で処理をしていたのだが、このAM9時処理に対してどういう風に対応すればいいのだろうか? バッチ処理は、CRONを使って、定時で1日1回の処理の場合以外に、ユーザーアクセスのタイミングで、AM9時よりも後の時間であれば前日、AM9時よりも前の時間であればそのさらに前日のデータを取得するという仕様。 少し悩んだ挙げ句対応した結末を備忘録しておきます。

日付判定

対象日のデータを見分けるために、次のような関数を作ってみた。 function get_target_date(){ return date('Y-m-d', strtotime("now -9 hour")); } この関数を実行することで、今の時間から9時間前の状態の日時が表示される。

解説

phpの、strtotime関数は非常に便利で、文字列を日数に変換してくれます。  サンプルを見てもらうと分かると思うが、およそ想像できる時間や日付指定を、date関数で日付フォーマットに変換してくれる。

サンプル

# 前日 strtotime("today -1 day") # 1週間前 strtotime("today -1 week") # 3時間前 strtotime("now -3 hour") # 次の火曜日 strtotime("next Thursday") # 直前の月曜日 strtotime("last Monday") # 来月の1日 strtotime("first day of next month") # 2ヶ月後の1日 strtotime("first day of 2 months ago")

リファレンスサイト

参考 : php : strtotime