PHP - 检查foreach循环中的日期范围/可用性

时间:2018-03-22 05:22:08

标签: php date

我正在为贷款产品(类似于图书馆借阅系统)的贷款系统界面工作。我从一个符合某些基本标准的数据库中检索一组产品,然后我需要在表格中显示它们并标记可用的和不可用的那些。

可用性是通过将用户输入的日期范围与每种产品的任何现有贷款的一系列日期范围进行比较来确定的。例如,用户可能以{/ 1}}的MM / DD / YYYY格式输入开始日期,结束日期为03/26/2018,并且产品可能包含预订日期范围的现有列表,例如03/26/2018其中现有预订的每个日期范围用逗号分隔。

我使用foreach循环来检索要在我的表中显示的初始产品集,因此我希望同时在foreach循环中包含一个测试,并确定每个产品是否可用。如果请求的开始/结束日期与任何现有产品预订日期之间没有重叠,则产品可用,否则无法使用。

这是我当前结构的一个例子:

10/27/2017 - 05/01/2018,05/10/2018 - 05/21/2018, 08/10/2018 - 12/20/2018

1 个答案:

答案 0 :(得分:0)

您可以按如下方式测试产品的可用性:

$loanStartDateRequested = '03/26/2018';
$loanEndDateRequested = '03/26/2018';

foreach($records as $record) {
        $existingLoanDateRanges = $record->getField('loanDateRanges');
        // suppose it returns existing date range as 10/27/2017 - 05/01/2018,05/10/2018 - 05/21/2018, 08/10/2018 - 12/20/2018

        $existingDateRangeArray = explode(",", $existingLoanDateRanges);  // converts comma separated existing date range into array
         $available = 0;              // set variable available = 0

        foreach($existingDateRangeArray as $existingDate){    
              $existingDateArr = explode('-', $existingDate); // again converts daterange, for example, 05/10/2018 - 05/21/2018 into array 

              if(strtotime($loanStartDateRequested) >= strtotime(trim($existingDateArr[0])) && strtotime($loanEndDateRequested) <= strtotime(trim($existingDateArr[1])))
              {
                  $available = 1;
                   break;
               }
        }
 }

如果您有任何疑问,请随时提出。