【发布时间】:2012-01-15 18:26:29
【问题描述】:
以下 PHP 函数返回一个月的第 n 个工作日,例如2012 年 1 月的第三个星期三,格式为 18-1-2012:
<?php
function giveNthDay($month, $year, $no, $day) {
$counter = 0;
for($i=1;$i<=31;$i++) { //Schleife für 31 Tage
if(!checkdate($month, $i, $year)) { //wenn datum nicht existiert (bspw. 30. februar) zu nächstem schleifendurchlauf springen
continue;
} else {
if(date('l', strtotime($i.'-'.$month.'-'.$year))==$day) { //wenn generiertes Datum gleicher Wochentag wie gesuchter Tag $day
$counter++; //dann $counter um eins erhöhen
if($counter==$no) { //falls $counter==$no, also falls bspw. DRITTER ($no==$counter==3) Mittwoch gefunden, Datum zurückgeben
return $i.'-'.$month.'-'.$year;
}
}
}
}
return false; //existiert nicht, bspw. fünfter Sonntag gibt es nicht in jedem Monat
}
?>
如果日期不存在(例如 2012 年 1 月的第 5 个星期五),则返回 false。
这适用于以下示例:
giveNthDay(1, 2012, 3, "Wednesday");
giveNthDay(1, 2020, 3, "Wednesday");
giveNthDay(1, 2031, 3, "Wednesday");
但来自
giveNthDay(1, 2038, 3, "Wednesday");
打开,即使每年一月有超过 3 个星期三,它也会返回 false!
我试图找出这种奇怪行为的原因,但我无法弄清楚。谁能帮帮我?
【问题讨论】:
-
只执行 continue 的 if 块真的很恶心。你听说过“else if”吗?或者
getdate()函数?
标签: php