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



我正在为借出的产品开发一个借阅系统接口(类似于图书馆借阅系统)。我正在从数据库中检索一组满足某些基本条件的产品,然后我需要将它们显示在表中并标记可用和不可用的产品。

可用性是通过将用户输入的日期范围与每个产品的任何现有贷款的日期范围系列进行比较来确定的。例如,用户可能以 MM/DD/YYYY 格式输入03/26/2018开始日期和结束日期03/26/2018,并且产品可能具有预订日期范围的现有列表,例如10/27/2017 - 05/01/2018,05/10/2018 - 05/21/2018, 08/10/2018 - 12/20/2018其中现有预订的每个日期范围都用逗号分隔。

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

这是我当前结构的示例:

$loanStartDateRequested = '03/26/2018';
$loanEndDateRequested = '03/26/2018';
foreach($records as $record) {
$existingLoanDateRanges = $record->getField('loanDateRanges');
// this returns the comma separated values of existing date ranges
// would like to test and compare the dates here and set a variable if available/not available
}

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

$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;
}
}
}

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

最新更新