我有这个函数来生成一个范围之间的日期数组。我需要对其进行修改,以便在一周中的特定日期传递时接受另一个参数。
然后我会在该范围内获取当天的所有日期。我无法修改。感谢。
这是我的更新代码,即使我传递了6的值,它仍然会在日期范围内添加evey日。我可能正盯着我,但我看不到它。
function createDateRangeArray($strDateFrom,$strDateTo,$dateOfWeek=6) {
// takes two dates formatted as YYYY-MM-DD and creates an
// inclusive array of the dates between the from and to dates.
// could test validity of dates here but I'm already doing
// that in the main script
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));
if ($iDateTo>=$iDateFrom) {
if(!isset($dateOfWeek) || date('w')==$dateOfWeek) //if dateOfWeek not given or same as given
array_push($aryRange,date('Y-m-d',$iDateFrom));
while ($iDateFrom<$iDateTo) {
$iDateFrom+=86400; // add 24 hours
array_push($aryRange,date('Y-m-d',$iDateFrom));
}
}
if(count($aryRange)<1){
return false;
} else{
return $aryRange;
}
}
答案 0 :(得分:0)
替换
array_push($aryRange,date('Y-m-d',$iDateFrom));
通过
if(date('w',$iDateFrom)==$dateOfWeek)
array_push($aryRange,date('Y-m-d',$iDateFrom));
其中$dateOfWeek
为0(星期日)至6(星期六)
此外,您可以将代码重写为:
while ($iDateFrom<$iDateTo) {
array_push($aryRange,date('Y-m-d',$iDateFrom));
$iDateFrom+=86400; // add 24 hours, after adding it
}
避免重复代码(之后你不需要if
)
将其添加为可选参数:
function createDateRangeArray($strDateFrom,$strDateTo,$dateOfWeek=null){
if(!isset($dateOfWeek) || date('w')==$dateOfWeek) //if dateOfWeek not given or same as given
array_push($aryRange,date('Y-m-d',$iDateFrom));
}
答案 1 :(得分:0)
上面的回答(来自RiaD)基本上就是钉在它上面。
请注意:如果您只想要特定的工作日,则无需每个工作日进行迭代。
你可以每天迭代直到第一个想要的工作日,从他们那里跳过86400 * 7秒。效率更高。