-2

是否有可能在 PHP 中获得未来 6 个月的第 21 天的工作日?

例如,假设 21 日是下个月的星期二,那么我希望返回“星期二”。但我希望在接下来的 6 个月中每个月都能做到这一点。对此最优雅的解决方案是什么?

4

4 回答 4

2

这样的事情会给你预期的结果:

// starting date
$date = new DateTime('2012-08-21');

// iterate for 6 months
for ($i = 0; $i < 6 ; $i++) {
    echo $date->format('Y-m-d').' : '.$date->format('l') . PHP_EOL;
    $date->modify('+1 month');
}
于 2012-08-20T21:03:27.353 回答
1

DatePeriod和类对于DateInterval这类事情非常方便。

$date = DateTime::createFromFormat('d', 21);
$period = new DatePeriod($date, new DateInterval('P1M'), 6, DatePeriod::EXCLUDE_START_DATE);
foreach ($period as $day) {
    echo $day->format('M jS => l'), PHP_EOL;
}
于 2012-08-20T21:09:03.533 回答
0

未经测试,但试试这个:

$date = 21;
$year = 2012;
$month = date('m'); // Get current month
for($i=0;$i<6;$i++)
{
    if($month == 13)
    {
        $year++;
        $month=1;
    }
    $day = date('l',mktime(0,0,0,$month,$date,$year));
    echo "$month $date falls on $day<br />\n";
    $month++;
}
于 2012-08-20T21:05:36.527 回答
0

是的:

<?php

$date = new DateTime;
$date->modify("first day of this month");
$date->modify("+20 days"); //21st
echo $date->format("F: l (Y-m-d)") . PHP_EOL;
for ($i = 0; $i < 6; $i++) {
    $date->modify("+1 month");
    echo $date->format("F: l (Y-m-d)") . PHP_EOL;
}
于 2012-08-20T21:08:19.693 回答