![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
PHPを勉強中の者です。
タイトルの通りですが、date()をCronで実行しても空白の時間ができてしまい困っています。
具体的には例えば、var_dump出力すると
Tue Mar 05 01:00:00 +0000 2013…(1)
Tue Mar 05 03:00:00 +0000 2013…(2)
Tue Mar 05 07:00:00 +0000 2013…(3)
Tue Mar 05 09:00:00 +0000 2013…(4)
Tue Mar 05 13:00:00 +0000 2013…(5)
Tue Mar 05 15:00:00 +0000 2013…(6)
Tue Mar 05 21:00:00 +0000 2013…(7)
Wed Mar 06 1:00:00 +0000 2013…(8)
Wed Mar 06 3:00:00 +0000 2013…(9)
Wed Mar 06 7:00:00 +0000 2013…(10)
という(1)~(10)のString文字列があって、これを
$yesterday = date('D M d', strtotime('-1 day'));
という、昨日の日付のみを抽出する形で、当日の夜0:30に実行します。
これを毎日行うようにしています。
(例でいうと、2013年3月5日のみを抽出するのに、2013年3月6日の0:30に実行します)
自分のパソコンのxamppでテストした場合は問題なく拾えます。
この場合だと「3月5日分のみ」の(1)~(7)です。
しかし、このPHPファイルをさくらサーバーに置いてcronに設定して同じことをすると
(4)~(7)のみしか拾えません。
(1)~(3)を拾ってくれないのです。
つまり、
9:00(朝)~0:30(夜)→この時間のある記述は拾う
0:30(夜)~9:00(朝)→この時間のある記述は拾ってくれない
なぜか9:00(朝)~0:30(夜)の時間だけ
$yesterday = date('D M d', strtotime('-1 day'));
で読み込まないようで、何がこの空白の時間を生むのか分からなくて困っています。
まだPHPも慣れないため、ところどころ語弊があるような奇妙な文章だったら恐縮ですが、御存知の方がいらっしゃいましたらご教示頂けたら幸いに存じ上げます。
No.1ベストアンサー
- 回答日時:
>$yesterday = date('D M d', strtotime('-1 day'));
これって(たとえば)"Tue Mar 05"といった文字列ですよね?これと提示されている文字列をどのように比較されているんでしょうか?
文字列としての「含む・含まない」とは違う比較方法じゃないかと推測するのですが(データベースに格納されている日付時刻値とか)。文字列でなく日付時刻として比較すると、提示されているのがGMT(+0000)ですからJST(+0900)とは「9時間の時差」があります。
#xamppは明示的にDateTimeZoneをTokyo/Asiaに
#指定しないとJSTにならなかった気がするので・・・
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのオートフィルが英語でしか機能しない 1 2022/06/02 22:43
- Android(アンドロイド) スマホでWi-Fi使用時に、LINEから画像が送れなくなってしまいました。 1 2022/09/25 10:03
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- 中学校 2学期実力テストの国語の勉強法 1 2022/08/01 00:17
- 子育て 早起きすぎる1歳娘、どうしたらいいか・・ 12 2023/07/06 13:38
- 大学受験 高3進研模試(マーク)進研模試30以下英検4級レベルから9月12日の模試までに英語又は国語を40まで 2 2022/08/02 00:17
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Cronでdate()を実行して一部の...
-
「取得先」という表現について
-
積立投資してます。現在平均取...
-
VBAでPDFのアクティブページ番...
-
Yahoo! JAPAN IDを新規取得でき...
-
Dosブロンプトでtabを出力したい
-
各クライアントマシンのログイ...
-
EXCEL VBAでのCSV出力について
-
PHP正規表現の難題・preg_repla...
-
DTOとEntityの差は何ですか。
-
IEを使わないでhtmlテキストを...
-
逆順表示したい?
-
URLエンコードされなかったパラ...
-
syntax error, unexpected 'ech...
-
phpでcookieがうまく保存されない
-
バッチファイルでpingの結果を...
-
VB.NETでボリュームを取得・設...
-
ps3で久しぶりにCDの音楽情報取...
-
PHPのセッション有効期限について
-
Windows NT4.0 と 2000 のCP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
PHP 指定した期間だけ表示した...
-
Accessで、DAOでAddnew
-
C言語を使って、ある特定の日の...
-
codeigniterの時間設定
-
日付計算について
-
昨日の日付名でファイルを作成...
-
現在時刻をyyyymmddhhmmss形式...
-
substrの使い方について教えて...
-
差分の月数を算出する方法
-
1ヶ月後の日付を出力したい
-
経過期間計算がうまくいかない
-
C言語でシステム日付との差を...
-
今日の日付から1週間のリスト
-
アップロードしたファイル名に...
-
strtotime 日付の変換
-
PHPでmysqlを使ってます。日時...
-
6ヶ月前の日付を取得するにはど...
おすすめ情報