在接下来的6个月中获得某一天的工作日

时间:2012-08-20 20:57:48

标签: php

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

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

4 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分:1)

DatePeriodDateInterval类对于这类事情非常方便。

$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;
}

答案 2 :(得分: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++;
}

答案 3 :(得分: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;
}