我的网站目前有很多bug(加载缓慢,MySQL数据丢失)-我发现了一个非常奇怪的解释。我的一个函数中的一行就是问题所在。
功能如下:
function lukkedage($aar) {
$aaret = date("Y", $aar);
$lukkedagearray = array(
date("d-m-Y",easter_date($aaret)), //Påskedag
date("d-m-Y",easter_date($aaret)-259200), //Skærtorsdag
date("d-m-Y",easter_date($aaret)-172800), //Langfredag
date("d-m-Y",easter_date($aaret)+86400), //2. Påskedag
date("d-m-Y",easter_date($aaret)+2246400), //Store Bededag
date("d-m-Y",easter_date($aaret)+3369600), //Kristi himmelfart
date("d-m-Y",easter_date($aaret)+4233600), //Pinsedag
date("d-m-Y",easter_date($aaret)+4320000), //2. pinsedag
"24-12-".$aaret,
"25-12-".$aaret,
"26-12-".$aaret,
"27-12-".$aaret,
"28-12-".$aaret,
"29-12-".$aaret,
"30-12-".$aaret,
"31-12-".$aaret,
"01-01-".$aaret
);
return $lukkedagearray;
}
function NaesteArbejdsdag($dato) {
$naeste = date('d-m-Y H:i', strtotime(date("d-m-Y H:i",$dato) .' +1 day'));
$strnaeste = strtotime($naeste);
$ny = $strnaeste;
while(date("l",$ny) == "Sunday" OR date("l",$ny) == "Saturday"
OR in_array(date("d-m-Y",$strnaeste), lukkedage($strnaeste), true)
){
$ny += 60*60*24;
}
if(date("H",$ny) >= "17" OR date("H",$ny) < "09"){
$ny = strtotime(date("d-m-Y",$ny)."09:00");
}
return date("d-m-Y H:i",$ny);
}
第一个函数是一个包含所有假日的数组,下一个函数是它检查下一个工作日的位置——如果明天是周六、周日或假日,请跳到下一天。
让我疯狂的部分是:
OR in_array(date("d-m-Y",$strnaeste), lukkedage($strnaeste), true))
这样行不行吗?我相信我出现问题的原因是执行时间过长——但为什么呢?
我马上看到的几个问题:
1:缺少easter_date()
函数。
2:在while
循环中使用$ny
和$strnaeste
变量,但只更新$ny
。使用ONE变量。
$ny = $strnaeste;
while(date("l",$ny) == "Sunday" OR
date("l",$ny) == "Saturday" OR
in_array(date("d-m-Y",$ny), lukkedage($ny), true)) $ny += 60*60*24;