我怎样才能获得几周的具体日期?

时间:2015-10-03 12:40:18

标签: php datetime

使用PHP,我想在给定的周数内获取特定工作日的日期。例如,我想从星期一,星期三和星期五算起10周的日期。

我想要的伪代码是这样的:

function (monday, wednesday, friday, 10) {

    // 10 is week numbers

    week1 5,7,9 oct 2015
    week2  12,14,16 oct 2015 
    ...
    week10
}

我为此写了一个解决方案。谢谢你的所有答案。

<?
$dates = array();
$i = 0;

while(true) {
    $i++;

    $time = strtotime("+$i days");
    $dayOfWeek = date('w', $time);

    if(  
    /*
    0-sun
    1-mon***
    2-tue
    3-wed***
    4-thu
    5-fri***
    6-sat
    */
    ($dayOfWeek == 0) or
    ($dayOfWeek == 2) or
    ($dayOfWeek == 4) or 
    ($dayOfWeek == 6) 

      ) {
        continue;
    }

    $dates[] = date('Y-m-d', $time);

    if( count($dates) > 30 ) {
        break;
    }

    echo json_encode($dates ); 
} 
?>

2 个答案:

答案 0 :(得分:0)

听起来你想要使用日程安排。我建议你看看名为When的库,它是“PHP 5.3 +的日期/日历递归库”

您想要做的是接下来10周的MWF时间表:

$now = new DateTime('NOW');
$after10Weeks = clone $now;
$after10Weeks->modify('+10 week');

$r = new When();
$r->startDate($now)
  ->freq("weekly")
  ->until($after10Weeks)
  ->byday(array('MO', 'WE', 'FR'))
  ->generateOccurrences();

$occurrences = $r->occurrences;

答案 1 :(得分:0)

使用PHP DateTime ISO日期

$date = new DateTime(); //The object
$year=2015; // Desired year
$days = array('Mon', 'Wed', 'Fri'); // Desired days of week

for ($yearDay=1; $yearDay<=366; $yearDay++) {
    $date->setISODate($year,null, $yearDay); // call ISO Date
    $week=$date->format('W'); // Get the week resulted 
    $day=$date->format('D');  // Get the day name resulted

    if($week==10 && in_array($day, $days))  // return only dates of desired days of week 10
         echo $date->format('M d Y')."<br>";
}

有关ISO日期here

的更多信息

您可以使用PHPTester

尝试此代码