[PHP] 日別処理がAM9:00に切り替わる時の日付取得方法
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")