这是我正在尝试写的功能:
function getWednesdays($month, $year) {
// Returns an array of DateTimes representing all Wednesdays this month.
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢-
Gor*_*don 29
使用PHP5.3
function getWednesdays($y, $m)
{
return new DatePeriod(
new DateTime("first wednesday of $y-$m"),
DateInterval::createFromDateString('next wednesday'),
new DateTime("last day of $y-$m")
);
}
Run Code Online (Sandbox Code Playgroud)
用法:
foreach (getWednesdays(2010, 11) as $wednesday) {
echo $wednesday->format("l, Y-m-d\n");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Wednesday, 2010-11-03
Wednesday, 2010-11-10
Wednesday, 2010-11-17
Wednesday, 2010-11-24
Run Code Online (Sandbox Code Playgroud)
请注意,这将排除结束日期,因此如果$y-$m恰好是星期三的最后一天,它将不在列表中.您必须在结束日期添加一天,以包含它.要包含它,请将结束日期中的相对格式更改为
new DateTime("next month $y-$m-01")
Run Code Online (Sandbox Code Playgroud)
然后将结束日期设置为下个月的第一天,
PHP <5.3
function getWednesdays($y, $m)
{
$ts = strtotime("first wednesday $y-$m-01");
$end = strtotime("last wednesday $y-$m");
$wednesdays = array();
while($ts <= $end) {
$wednesdays[] = $ts;
$ts = strtotime('next wednesday', $ts);
}
return $wednesdays;
}
Run Code Online (Sandbox Code Playgroud)
用法:
foreach (getWednesdays(2010, 11) as $wednesday) {
echo date("l, Y-m-d\n", $wednesday);
}
Run Code Online (Sandbox Code Playgroud)
与上面相同的输出(在键盘上运行).
请注意,由于相对格式解析器的更改,这对5.3之前的任何版本都不起作用.如果你想在PHP 5.3+中使用它,你必须first Wednesday $y-$m-01改为first Wednesday of $y-$m-01(记住"of").此外,就像在DateTime版本中一样,不包括结束日期.
进一步阅读: