Laravel 根据日期范围内的商店营业天数获取日期列表

问题描述

我有一个表,OperatingHours,其中记录了一周中某天(星期一、星期二、星期三到星期日)的 7 行数据。还有一个数据列,用户可以在其中设置诊所是否在一周内营业。

我想生成一个从当前日期到年底的日期列表,到诊所营业的那一天。目前以下是我的方法的控制器代码,我收到以下错误

DateTime::modify(): 解析时间字符串失败(这个 [{"day":"Monday"},{"day":"Tuesday"},{"day":"Wednesday"},{"day":"Thursday"},{"day":"Friday"} ]) 在位置 0 (t):在数据库中找不到时区

public function index(){

$operatingDays = OperatingHour::where('clinic_open',true)->get('day');

$currentDate = Carbon::Now()->toDateTimeString();
$endOfYear - Carbon::Now()->endOfYear()->toDateTimeString();

$dt = $this->getWorkDayInRange($operatingDays,$currentDate,$endOfYear);

$data = [
'dt' = $dt,];

return view('appointment',$data);
}

public function getWorkDayInRange($workday,$fromDate,$toDate){
$dates = [];
 $startDate = Carbon::parse($fromDate)->modify("this $workday");
 $endDate = Carbon::parse($toDate);

 //lte = less than or equal
 for ($date = $startDate; $date->lte($endDate); $date->addWeek()) {
   $dates[] = $date->toDateString();
 }

        return $dates;
}

解决方法

我最近用过类似的东西,看看这个:

function generateDateRange($start,$end){
    $result = []
    $end = = strtotime($end);
    $current = = strtotime($start);

    while( $current <= $end ) {
         $result[] = date('Y-m-d',$current);
         $current = strtotime('+1 day',$current);
    }
    return $result;
}
,

我已设法根据我的营业时间详细信息和假期表检索出日期列表。

以下是我对代码所做的更改。

private function getHolidays()
    {
        $holidaysList = Holiday::where('clinic_id','=',$_SESSION['clinic_ID'])->get();
        $holidayArray = json_decode($holidaysList,true);
        
        foreach($holidayArray as $holiday){
            //Convert each data from table to Y-m-d format to compare
            $holidays[] = date('Y-m-d',strtotime($holiday['date']));
            // $holidays[] = $holiday['date'];
        }
        return $holidays;
        
    }
    
    public function getWorkDayInRange($workday,$dateFrom,$dateTo)
    {
        $holidays = $this->getHolidays();
        $startDate = new DateTime($dateFrom);
        $endDate = new DateTime($dateTo);
        $interval = new DateInterval('P1D');
        $dateRange = new DatePeriod($startDate,$interval,$endDate);
        $results = [];
        foreach ($dateRange as $date) {
            $name = $date->format('l');
            if (in_array($name,$workday) && !in_array($date->format('Y-m-d'),$holidays)) {
                $results[] = $date->format('Y-m-d');
            }
        }
        return $results;

    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...