我正在构建预订网络应用。 我从服务中提取数组,包含阻止日期。 使用日历小部件我想在2014-07-30至2014-08-04期间预订。 因为我的预订日期是在阻止日期中找到的(第二个索引[2014-08-01 - 2014-08-02]被阻止然后应该返回false(无法继续预订)。
$checkin = '2014-07-30';
$checkout = '2014-08-04';
$blockedDates = array(
array(
'start' => '2014-07-24',
'end' => '2014-07-27'
),
array(
'start' => '2014-08-01',
'end' => '2014-08-02'
),
array(
'start' => '2014-08-12',
'end' => '2014-08-15'
)
);
function morfora($blokedDates, $checkin, $checkout)
{
foreach ($blokedDates as $date) {
if (($checkin >= $date['start'] && $checkin <= $date['end']) || ($checkout <= $date['start'] && $checkout >= $date['end'])) {
return false;
}
}
return true;
}
var_dump(morfora($blokedDates, $checkin, $checkout)); //still true; should be false;
我需要你们的帮助,谢谢你们。
答案 0 :(得分:0)
你错了#34;($ checkin&gt; = $ date [&#39; start&#39;]&amp;&amp; $ checkin&lt; = $ date [&#39; end&#39; ])|| ($ checkout&lt; = $ date [&#39; start&#39;]&amp;&amp; $ checkout&gt; = $ date [&#39; end&#39;])&#34; 条件语句永远不会形成,所以总是返回true
答案 1 :(得分:0)
试试这个:
function checkBookedDate($start_date, $end_date, $date_range)
{
/**
* @var $start_object DateTime
*/
$start_object = DateTime::createFromFormat('Y-m-d', $start_date);
$end_object = DateTime::createFromFormat('Y-m-d', $end_date);
if (is_array($date_range)) {
foreach ($date_range as $row) {
$range_start = DateTime::createFromFormat('Y-m-d', $row['start']);
$range_end = DateTime::createFromFormat('Y-m-d', $row['end']);
if (($start_object > $range_start && $start_object < $range_end) ||
($end_object > $range_start && $end_object < $range_end)) {
return true;
}
}
return false;
} else {
return false;
}
}