• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cronでdate()を実行して一部の拾えない時間)

PHP Cronでdate()を実行して空白時間が発生する問題について

このQ&Aのポイント
  • PHPを勉強中の方がCronでdate()を実行しても空白の時間ができてしまう問題に困っています。具体的には、昨日の日付のみを抽出する形で当日の夜0:30に実行していますが、9:00〜0:30の時間帯の一部のデータが拾えません。
  • 自分のパソコンのxamppでテストした場合は問題なくデータを拾えますが、さくらサーバーにPHPファイルを置いてcronに設定すると、9:00〜0:30の時間帯のデータを拾ってくれません。
  • なぜ9:00〜0:30の時間帯のデータを拾えないのか原因が分からず、困っています。PHPに詳しい方からのアドバイスをお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>$yesterday = date('D M d', strtotime('-1 day')); これって(たとえば)"Tue Mar 05"といった文字列ですよね?これと提示されている文字列をどのように比較されているんでしょうか? 文字列としての「含む・含まない」とは違う比較方法じゃないかと推測するのですが(データベースに格納されている日付時刻値とか)。文字列でなく日付時刻として比較すると、提示されているのがGMT(+0000)ですからJST(+0900)とは「9時間の時差」があります。 #xamppは明示的にDateTimeZoneをTokyo/Asiaに #指定しないとJSTにならなかった気がするので・・・

walsch
質問者

補足

agunuz様。回答ありがとうございます。 そうです。言葉足らずで申し訳ございませんでした。 TwitterAPIにて一日前の日付のみ抽出したいと試みて練習しています。 文字列の「含む・含まない」は、 $yesterday = date('D M d', strtotime('-1 day')); if (preg_match( "/$yesterday/",$val->created_at)) { : のように比較しています。 御指摘の通り、 9:00(朝)~0:30(夜)→この時間のある記述は拾う 0:30(夜)~9:00(朝)→この時間のある記述は拾ってくれない …なので、おそらく仰る通り、9時間の時差分が抽出されていないのだと思います。 そこでここ数日、調べつつ試行錯誤してみたのですが、どこで調節すればいいのか分からず暗礁に乗り上げてしまいました。 例えば、 $yesterday = date('D M d', strtotime('-1 day -9 hour')); だと →2日前全部と1日前0:30(夜)~9:00(朝)の日付のみ拾ってしまう ・1日前の拾わなかった時間を拾ってくれるが、9:00(朝)~0:30(夜)を拾ってくれない。なによりも2日前の日付を全部抽出したいわけではないのでダメ 時差の方を調節するのかと思い、 if (preg_match( "/$yesterday/",$val->created_at) - 9*60*60) だと →3日前の途中と2日前全部と1日前全部の日付のみ拾ってしまう ・1日前の全部の時間を拾ってくれるが、なぜか3日前から2日前全部から1日前全部まで拾うのでダメ …それなのになぜか両方ともタイムスタンプされて表示される時間は、ツイートをした日本時間で間違いなく合致しています。 しかしなぜか、0:30(夜)~9:00(朝)の時間帯のみのタイムスタンプを $yesterday = date('D M d', strtotime('-1 day')); は無視するようです。 + 9時間の時差が補正される前に対して、-1 day の命令が行ってしまっていることは分かるのですが、どこを修正すればいいのか分からず困っています。 お手数でなければご教示頂けたら幸いに存じ上げます。

関連するQ&A