如何在PHP的给定日期范围内获取每周的特定日期?

时间:2015-10-03 13:10:16

标签: php date schedule dayofweek

这给了我日期范围内的每个星期一日期。

问题:如何获得每周一和周五的每周一?

$start_date = date('Y-m-d');
$end_date = date('Y-m-d', strtotime($start_date . ' + 1 MONTH'));

for(
    $i = strtotime('Monday', strtotime($start_date)); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 WEEK', $i)
) {
    echo date('Y-m-d', $i). '<br>';
}

我的更新:

$my_dates = [];
for(
    $i = strtotime($start_date); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 DAY', $i)
) {
    if(in_array(date('N', $i), array(1, 5))) {
        $my_dates[] = date('Y-m-d', $i);
    }
}

var_dump($my_dates);

2 个答案:

答案 0 :(得分:1)

查看名为When的库,它是“PHP 5.3 +的日期/日历递归库”

让我们说下个月的MF时间表:

$now = new DateTime('NOW');
$till = clone $now;
$till->modify('+1 month');

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

$occurrences = $r->occurrences;

答案 1 :(得分:0)

如果我没错,你只需像{/ p>一样使用for循环

$start = "2015-09-01";
$end = date('Y-m-d',  strtotime("$start +1 months"));
$period = floor((strtotime($end) - strtotime($start))/(24*60*60));

for($i = 0; $i < $period; $i++){
    if(in_array(date('l',strtotime("$start +$i day")),["Monday","Friday"]))
        echo date('l d M, Y',strtotime("$start +$i day"))."\n";
}

<强>输出:

Friday 04 Sep, 2015
Monday 07 Sep, 2015
Friday 11 Sep, 2015
Monday 14 Sep, 2015
Friday 18 Sep, 2015
Monday 21 Sep, 2015
Friday 25 Sep, 2015
Monday 28 Sep, 2015

Demo