假设商店在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;
}
可能的操作:
$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)
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分:1)
你应该将字符串'16:00'转换为日期(而不是将实际日期转换为字符串)并进行2个日期值之间的比较。