2011-05-18 65 views
0

讓我們說店開到13:00,但客戶可以允許16:00(標準時間)後,使訂單處理開標時間及截止時間

if語句似乎並不如預期正常工作,如何解決它?

代碼:

if ((date('H:i') >= '16:00') && ($data[$key]['opentime'] >= '16:00')) { 
    $data[$key]['open'] = 1; 
} else { 
    $data[$key]['open'] = 0; 
} 

可能的OpenTime:

$data[$key]['opentime'] 
// Opentime = 12:30 
// Opentime = 14:00 
// Opentime = 16:00 
// Opentime = 16:30 
// Opentime = 17:00 

而且顧客無法下單後,23時30分,但應與$data[$key]['closetime']檢查(例如:20:00,21:00)

回答

4

PHP不知道'10:00'是一個時間。到PHP,'10:00'只是文字。

這就像問PHP'abcfg'是否大於'jg'。

如果你知道你只需要處理幾個小時,只需使用一個數字來表示一個小時。你的代碼是這樣:

$h1 = (int) date('H'); 
$h2 = (int) $data[$key]['opentime']; // anything after ':' is ignored 
if (($h1 >= 16) && ($h2 >= 16)) { 
    $data[$key]['open'] = 1; 
} else { 
    $data[$key]['open'] = 0; 
} 
+0

謝謝,但開放時間可能是14:30(我需要包括小事) – user622378 2011-05-18 11:59:44

+0

啊哈,比使用@OZ_代碼和我的一起。 – Christian 2011-05-18 12:02:35

+0

它是50%的工作,但如果$ data [$ key] ['opentime']是16:00,並且訂單時間是13:00,那麼$ data [$ key] ['open']應該是0 ... – user622378 2011-05-18 12:17:03

3

好吧,也許這個小功能將幫助您:

function HourMinuteToDecimal($hour_minute) 
{ 
    $t = explode(':', $hour_minute); 
    return $t[0]*60+$t[1]; 
} 

編輯: 如果我理解你的代碼的邏輯是正確的,那麼:

if (HourMinuteToDecimal($data[$key]['opentime']) > HourMinuteToDecimal(date('H:i'))) { 
    $data[$key]['open'] = 1; 
} else { 
    $data[$key]['open'] = 0; 
} 
+0

The如果$ statement [$ key] ['opentime']是16:00而ordertime是13:00,那麼$ data [$ key] ['open']應該是0 .. – user622378 2011-05-18 12:18:30

+0

@ user622378好吧,我希望你現在可以修復它:) – 2011-05-18 12:22:11

+0

@OZ_ HourMinuteToDecimal功能不能工作24小時時間,例... 00:00,01:30。如何解決這個問題? – user622378 2011-05-18 18:33:54

1

你應該將字符串'16:00'轉換爲日期(而不是實際的日期到字符串)並且做兩個日期值之間的比較。