我正在建立一个交付日期系统,其概念非常简单;它会根据一系列假日日期,一些其他变量检查当前日期,如果需要,还会增加1天,如下所示:
int daysInCurrentMonth = java.time.LocalDate.now().lengthOfMonth();
所以我的问题是假期;我想获取变量$currentDate = date('d-m-Y');
$deliveryDate = date('d-m-Y', strtotime($currentDate, '+1 day');
$allHolidays = array('01-05-2018', '02-05-2018', '03-05-2018');
if ($outOfStock) {
$deliveryDate = date('d-m-Y', strtotime(currentDate, '+2 days');
}
[..and so on ]
return $deliveryDate;
并针对$deliveryDate
数组进行检查。如果它存在,我想'添加+1天'并再次检查。
因此,例如,如果5月1日,2日和3日是假期,$allHolidays
将在5月1日检查之前,它会看到5月1日在$deliveryDate
数组中,然后更新' +1天到5月2日,再次检查。仍然在阵列?再添加一天。直到结果将是5月4日。
$allHolidays
这是我现在的代码。它只检查一次。如何在此检查中更新变量,并再次检查?我有强烈的感觉,我需要使用if (in_array($deliveryDate, $allHolidays)) {
$deliveryDate = date("j-F-Y", strtotime($ddate. "+1 day"));
}
和for
循环,但我不知道如何构造它们。我尝试在整个循环中包装整个代码,但还没有运气。
编辑:使用do-while循环可以工作,但如何让它识别更新的变量?如果我更新它在do中的while-logic中使用的变量,它怎么能正常循环?
while
答案 0 :(得分:1)
我为你准备了一个演示。
我添加了一些"技巧"使用$outOfStock
布尔值来适当增加日数。通过将其添加到1
,布尔值的类型转换为int
值。 true
变为1
,false
变为0
。
其余部分应该是不言自明的......初始化$deliveryDate
,将其碰撞1或2天,然后碰撞它直到它不再落在列出的假期上。
代码:(Demo)
$outOfStock = true;
echo date('d-m-Y') , "\n"; // as baseline
$deliveryDate = date('d-m-Y', strtotime('+' . 1+$outOfStock . ' day')); // treat bool as int: instock=1, outofstock=2
echo $deliveryDate , "\n"; // as proof
$allHolidays = array('17-05-2018', '18-05-2018', '19-05-2018');
while(in_array($deliveryDate,$allHolidays)){
$deliveryDate = date('d-m-Y', strtotime("$deliveryDate +1 day"));
}
echo $deliveryDate;
输出:
16-05-2018
18-05-2018
20-05-2018