我正在尝试创建一个预订表单,用户可以在5分钟的间隔内选择2个给定时间之间的预订时间。例如,我希望在上午10点到下午12点之间的时间段,这将给我约20个时段。
当用户选择一个插槽时,最早的插槽应该比当前时间提前至少15分钟,但是如果需要,用户可以选择插槽和小时或更长时间。
我在SO上找到了一些代码(不记得在哪里),我已根据自己的需要对其进行了编辑,如果当前时间在开始和结束时间之内,但是如果当前时间是在最早的时间之前一小时,它不会创建时间段。
我知道为什么会这样做,但我不知道如何解决它。它与public int compare(Trees t1, Trees t2) {
// convert names to lowercase
String name1 = t1.get().toLowerCase();
String name2 = t2.get().toLowerCase();
// compare the two names
return name1.compareTo(name2);
}
条件有关。
如果可能的话,我希望能够在第一个可用时段之前预订一个时段。
while
答案 0 :(得分:1)
Carbon拥有从基类DateTime
类继承的所有函数。如果您发现Carbon中缺少任何内容但DateTime
中存在任何内容,则此方法允许您访问基本功能。
// Carbon::diffInYears(Carbon $dt = null, $abs = true)
echo Carbon::now('America/Vancouver')->diffInSeconds(Carbon::now('Europe/London')); // 0
$dtOttawa = Carbon::createFromDate(2000, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2000, 1, 1, 'America/Vancouver');
echo $dtOttawa->diffInHours($dtVancouver); // 3
echo $dtOttawa->diffInHours($dtVancouver, false); // 3
echo $dtVancouver->diffInHours($dtOttawa, false);
使用碳类对此非常有帮助
答案 1 :(得分:1)
我设法使用Datetime()
让它工作$timenow = new DateTime(date('H:i'));
$timenow->add(new DateInterval('PT15M'));
$start = new DateTime('11:00');
$end = new DateTime('14:00');
$interval = new DateInterval('PT5M');
$time_slots = $this->countStartTimes();
$available_slots = array();
$period = new DatePeriod($start, $interval, $end);
foreach($period as $time) {
$timeslot = $time->format('H:i');
if ($timenow > $time) {
continue;
}
if(array_key_exists($timeslot, $time_slots)) {
if($time_slots[$timeslot] == SLOTS) {
$available_slots[] = array('key' => $timeslot, 'value' => 'FULL');
continue;
}
}
$available_slots[] = array('key' => $timeslot, 'value' => $timeslot);
}