2011-12-08 4 views
0

私は店がまだ深夜の後に開いているか閉じているかどうかを検出する問題を抱えています。火曜日に真夜中の時間の問題

$weekday = 2)、(真夜中の後)1:30まで午後6時から

を開い買い物現在の時刻を想定し、この問題を解決するためのソリューションです何午前1時05 AM

$weekday = 2; 

    //Convert current time to minutes (01:05) 
    $currentTime = ($weekday - 1) * 1440 + "01" * 60 + "05"; 

    //Current Week Day 

    $shopOpenTime = "18:00"; 
    $shopCloseTime = "01:30"; 

    $open = explode(':', $shopOpenTime); 
    $close = explode(':', $shopCloseTime); 

    //Convert to Minutes; 
    $MinutesOpen = (($weekday - 1) * 1440) + ($open[0] * 60 + $open[1]); 
    $MinutesClose = (($weekday - 1) * 1440) + ($close[0] * 60 + $close[1]); 
    if ($MinutesClose < $MinutesOpen) 
     $MinutesClose += 60 * 24; 


    if (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose)) { 
     echo "Shop Is Open"; 
    } else { 
     echo "Shop Is Close"; 
    } 

です問題?

答えて

0

現在の時刻と現在の時刻を比較するのは、です。しかし、昨日開店したため、店舗は現在開店しています。ただ、また昨日の期間との比較:

if ((($currentTime >= $MinutesOpen - 1440) && ($currentTime < $MinutesClose - 1440)) || (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose))) { 

しかし店は/が同時に毎日開閉する場合、これは、のみ動作し、注意してください。

+0

毎日、店舗の開閉時間が異なる場合があります。例:月18:00〜23:30、火11:00〜22:00、金13:00〜01:00(深夜以降)だからそれに対する解決策は何ですか? –

1

正に、このコード全体を書き直す必要があります。あなたの$ weekdayパラメータが$ currentTimeの同じ日を$ minutesOpenとして比較しているので、ロジックは破滅します。 24時間を$ minutesに追加して、それを(技術的にはWed)にプッシュすると、比較が正しいようになりました。あなたは$ currentTimeを24時間でwedに移動していないので、Closedと言います。

英語でこれを読んでいたら、火曜日の午前1時30分(火曜日の午後6時30分)と比較しています(これは平日の$平日パラメータは$ currentTimeのtuesdayに設定されます)。

$ weekdayパラメータをどのように設定するのか分かりませんが、実際にこのコードを実行したときにdate()関数と呼ばれるコードを実行すると、12時01分(火曜日)あなたは、コードは開いていると閉じている時間をwedの時間で埋めるでしょう。

申し訳ありませんこれは論理全体を書き直すという解決策ではありませんが、実際には運用環境に大きな欠陥があると思います。

「火曜日」の考え方や文脈にとどまりたいのであれば、火曜日の感覚で現在の時刻を反映させなければならない。そして、25時05分は1時05分を意味し、 05火曜日に2回目です。コンテキストが正しく維持され、動作します。

$currentTime = ($weekday - 1) * 1440 + "25" * 60 + "05"; 
+0

ああ、あなたが言うことを理解しています。あなたは私の論理をとてもうまく説明しました。あなたは、適切な解決策が何であるべきかを言っていませんでしたか?あなたの最後の文が適切な解決策であることを意味しますか? ...私がそれを探している解決策は、ある日(曜日)は異なるオープン/クローズ時間になります。例:ショップA社(月18:00〜23:30、火11:00〜22:00、金13:00〜01:00(深夜0時)....分データベースに格納するか、TIMEフィールドタイプを使用しますか? –

関連する問題