填充时间范围夜间时间php

填充时间范围夜间时间php,php,datetime,Php,Datetime,我有开放时间和封闭时间。使用这两个变量,我使用以下代码以30分钟的间隔填充时间范围: function getTimeRange($open,$closed) { //$begin = new DateTime($open); $begin = new DateTime($open); $end = new DateTime($closed); $interval = DateInterval::createFromDateString('30 min'); $times

我有开放时间和封闭时间。使用这两个变量,我使用以下代码以30分钟的间隔填充时间范围:

function getTimeRange($open,$closed) {
  //$begin = new DateTime($open);
  $begin = new DateTime($open);
  $end   = new DateTime($closed);
  $interval = DateInterval::createFromDateString('30 min');
  $times    = new DatePeriod($begin, $interval, $end);
  $timeRange = [];
  foreach ($times as $time) {
    $timeRange[] = $time->add($interval)->format('H:i');
  }
  return $timeRange;
}
工作正常,但有时我的开放时间是在晚上。所以从10点到3点。我这样做是为了让我的软件理解,如果商店营业到2:00,它会将当天设置为前一天。。。所以如果是星期一15:00到2:00。。。凌晨2点仍然是星期一

但是现在对于这个时间范围代码,我也需要类似的东西,但我不知道如何处理这个问题。因为当你把开放时间改为10:00关闭时间改为23:59时,效果很好,但当你把结束时间改为2:00时,它就什么都没有了

如果结束时间像。。。00:00到04:00我想设定一个范围,并将其视为1天

//在MAGUS AWNSER之后更新 硬编码不起作用。但在类中,我删除了顶部的“名称空间碳;”。。然后所有的工作,你的代码也优秀

但是现在我犯了这样的错误

Warning: The use statement with non-compound name 'DateTime' has no effect in /Applications/XAMPP/xamppfiles/htdocs/r/classes/class.Carbon.php on line 14
Warning: The use statement with non-compound name 'DateTimeZone' has no effect in /Applications/XAMPP/xamppfiles/htdocs/r/classes/class.Carbon.php on line 15
Warning: The use statement with non-compound name 'InvalidArgumentException' has no effect in /Applications/XAMPP/xamppfiles/htdocs/r/classes/class.Carbon.php on line 16
我不知道这是什么意思。。。如果我也发表评论:

//namespace Carbon;

//use DateTime;
//use DateTimeZone;
//use InvalidArgumentException;

那么一切都不会出错。。。所以我不知道这是否会导致问题?

我建议你使用碳!

您的函数如下所示:

<?php
function getTimeRange($open,$closed) {
    $begin = Carbon::createFromFormat('H:i', $open); //assuming 20:00 here
    $end   = Carbon::createFromFormat('H:i', $closed); //assuming 04:00 here
    //Checking if $closed is in the same day!
    if(intval(explode(':',$open)[0]) > intval(explode(':',$closed)[0]){
        //Truth means that 20 > 4, so $closed should be the next day!
        $end->addDay();
    }
    //I didnt really understood what you wanted here but im guessing
    //you want some sort of array like ['20:00','20:30','21:00',...]
    $halfTimes = $begin->diffInHours($end) * 2;
    $timeRange = [];
    for($i=0;$i<$halfTimes;$i++){
        $begin->addMinutes(30);
        $timeRange[] = $begin->format('H:i');
    }
    return $timeRange;
}

很难看出你在问什么。30分钟间隔的意义是什么?请包含调用此函数的代码,并让我们了解您期望的输出。我只需调用此函数并插入2次。。。餐厅开门时间和餐厅关门时间。。。。。。我插入的是例如10:00和2:00…我正在尝试这个,但出于某种原因,如果在我的classes文件夹中包含class.Carbon.php。。。由于某种原因,spl_autoload_寄存器无法加载?请尝试对require(文件)进行硬编码,以检查错误是在autoload_寄存器中还是在类中,这只是一个简单的警告。请看,“名称空间”和“使用”更适合于一个OO项目,使用composer获得碳包和其他一些奇特(而且非常有用)的东西。如果没有它们,您的代码应该运行良好,不要担心;)