返回基于PHP中开始和结束时间的时隙数组
发布时间:2020-12-13 17:14:41 所属栏目:PHP教程 来源:网络整理
导读:我需要你的帮助以解决以下问题.我正在建立一个使用 PHP的网站,我想在其上显示一个显示一周中几天的日历,每天分为3个时段.这些时隙可以是免费的,也可以是预订的,在这种情况下,时间段是不可选择的. 到目前为止一切都那么好,但问题在于显示预定的时间段.我从脚
我需要你的帮助以解决以下问题.我正在建立一个使用
PHP的网站,我想在其上显示一个显示一周中几天的日历,每天分为3个时段.这些时隙可以是免费的,也可以是预订的,在这种情况下,时间段是不可选择的.
到目前为止一切都那么好,但问题在于显示预定的时间段.我从脚本中获取预订数据,该脚本为我提供了开始日期和时间,以及结束日期和时间.这些日期/时间戳可以是任何时间戳,也不受时间段时间的约束.它们可以在同一天,也可以跨越多天.每个时段的时间段相同:从9到13,13到17和19到23小时. 例如,假设我的开始时间为17-12-2012 13:00,结束时间为18-12-2012 11:00,我希望我的函数给我一个这样的数组: array(1) { ["meetingroom1_booked"]=> array(3) { [0]=> array(2) { ["day"]=> string(10) "2012-12-17" ["timeslot"]=> string(1) "2" } [1]=> array(2) { ["day"]=> string(10) "2012-12-17" ["timeslot"]=> string(1) "3" } [2]=> array(2) { ["day"]=> string(10) "2012-12-18" ["timeslot"]=> string(1) "1" } } } 我一直在绞尽脑汁,但无法想出一个处理起跑时间跨度多天的好解决方案.在一天的开始和结束时间,没有问题:我可以比较开始时间和时段时间.当然,这在多天内不起作用.任何指向正确的方向都非常感谢!谢谢! 解决方法
另一种简单算法的方法:
<?php $start_date = '2012-12-17'; $start_time = '13:00'; $end_date = '2012-12-18'; $end_time = '11:00'; $slots = array(1=>'09:00',2=>'13:00',3=>'19:00'); // [helper] $start_date_stamp = strtotime($start_date); $end_date_stamp = strtotime($end_date); $startdate_timestamp = strtotime($start_date . ' ' . $start_time); $enddate_timestamp = strtotime($end_date . ' ' . $end_time); // [/helper] $cur_date_stamp = $start_date_stamp; $result = array(); if ($enddate_timestamp >= $startdate_timestamp) { // [loop for each date] while($cur_date_stamp <= $end_date_stamp) { foreach($slots as $slkey=>$slval) { if ($cur_date_stamp == $start_date_stamp) { // compare for current date = start date $check_slot_stamp = strtotime(date('Y-m-d',$cur_date_stamp) . ' ' . $slval); if ($startdate_timestamp <= $check_slot_stamp) { $result[] = array( 'day' => date('Y-m-d',$cur_date_stamp),'timeslot' => $slkey ); } } elseif ($cur_date_stamp == $end_date_stamp) { // compare for current date = end date $check_slot_stamp = strtotime(date('Y-m-d',$cur_date_stamp) . ' ' . $slval); if ($check_slot_stamp <= $enddate_timestamp) { $result[] = array( 'day' => date('Y-m-d','timeslot' => $slkey ); } } else { // 3 slots will be added for any date other than start_date and end_date $result[] = array( 'day' => date('Y-m-d','timeslot' => $slkey ); } } $cur_date_stamp = strtotime('+1 day',$cur_date_stamp); // next day } // [/loop for each date] } $result = array('meetingroom1_booked'=>$result); var_dump($result); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |