微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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;

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?