PHP:DateInterval每两周X天

PHP:DateInterval每两周X天,php,arrays,date,date-range,dateinterval,Php,Arrays,Date,Date Range,Dateinterval,我有开始日期和结束日期。 我想每两周的周二和周三都有空 // start date example: 2017-05-20 (saturday) // output should be like: 2017-05-22 (SU) 2017-05-24 (WE) 2017-05-26 (FR) 2017-06-05 (SU) 2017-06-07 (WE) 2017-06-09 (FR) ... 示例: $start = new FrozenTime('2017-05-2

我有开始日期和结束日期。
我想每两周的周二和周三都有空

// start date example: 2017-05-20 (saturday)
// output should be like:
2017-05-22 (SU)  
2017-05-24 (WE)  
2017-05-26 (FR)  
2017-06-05 (SU)  
2017-06-07 (WE)  
2017-06-09 (FR)  
...
示例:

$start = new FrozenTime('2017-05-23'); // Date is in this format 'cause I'll save into DB  
$endOfYear = $start->endOfYear();  

$perWeek = new \DateInterval('P14D'); // I want every 2 weeks

$periodPerWeek = new \DatePeriod($start, $perWeek, $endOfYear);  

$days = ['2', '3']; // Tuesday and Wednesday  

foreach ($periodPerWeek as $value) {
   if (in_array($value->format('N'), $days)) {
        $test[] = [
            'start' => $value
        ];    
   }
}  
"start": "2017-05-23",  
"start": "2017-06-06",  
"start": "2017-06-20",  
2017-05-23(tu)
2017-05-24(我们)

2017-06-06(tu)
2017-06-07(我们)

我想在PHP中做什么:

$start = new FrozenTime('2017-05-23'); // Date is in this format 'cause I'll save into DB  
$endOfYear = $start->endOfYear();  

$perWeek = new \DateInterval('P14D'); // I want every 2 weeks

$periodPerWeek = new \DatePeriod($start, $perWeek, $endOfYear);  

$days = ['2', '3']; // Tuesday and Wednesday  

foreach ($periodPerWeek as $value) {
   if (in_array($value->format('N'), $days)) {
        $test[] = [
            'start' => $value
        ];    
   }
}  
"start": "2017-05-23",  
"start": "2017-06-06",  
"start": "2017-06-20",  
结果:

$start = new FrozenTime('2017-05-23'); // Date is in this format 'cause I'll save into DB  
$endOfYear = $start->endOfYear();  

$perWeek = new \DateInterval('P14D'); // I want every 2 weeks

$periodPerWeek = new \DatePeriod($start, $perWeek, $endOfYear);  

$days = ['2', '3']; // Tuesday and Wednesday  

foreach ($periodPerWeek as $value) {
   if (in_array($value->format('N'), $days)) {
        $test[] = [
            'start' => $value
        ];    
   }
}  
"start": "2017-05-23",  
"start": "2017-06-06",  
"start": "2017-06-20",  
它在数组中只得到一个日期。我也要去拿星期三的!我怎么做

重要提示:
开始日期并不总是星期二。用户可以选择他想要的周天数

Ex: 用户可以每两周选择一次SU、WE和FR

// start date example: 2017-05-20 (saturday)
// output should be like:
2017-05-22 (SU)  
2017-05-24 (WE)  
2017-05-26 (FR)  
2017-06-05 (SU)  
2017-06-07 (WE)  
2017-06-09 (FR)  
...
一种方法

/**
*@param\DateTime$start
*@param\DateTime$end
*@param数组$天,即[星期二”,“星期三”,“星期六]
* 
*@return数组
*/
每两周运行一次($start、$end、$days)
{
$dates=[];
$mon=新日期时间('mon this week')。$start->format('Y-m-d');
而($mon格式('Y-m-d');
foreach($天作为$天){
$date=新的日期时间($day$of”);
如果($日期<$开始){
继续;
}
如果($date>$end){
破口2;
}
$dates[]=$date;
}
$mon->add(新的日期间隔('P2W'));
} 
返回$日期;
}
用法:

$start=新日期时间('2017-05-23');
$end=新日期时间('2017-06-21');
$dates=每两周($start,$end,['tue','wed','sat']);
输出:

2017-05-23 Tue 2017-05-24 Wed 2017-05-27 Sat 2017-06-06 Tue 2017-06-07 Wed 2017-06-10 Sat 2017-06-20 Tue 2017-06-21 Wed 2017-05-23星期二 2017-05-24星期三 2017-05-27周六 2017-06-06星期二 2017-06-07星期三 2017-06-10周六 2017-06-20星期二 2017-06-21星期三 演示

一种方法

/**
*@param\DateTime$start
*@param\DateTime$end
*@param数组$天,即[星期二”,“星期三”,“星期六]
* 
*@return数组
*/
每两周运行一次($start、$end、$days)
{
$dates=[];
$mon=新日期时间('mon this week')。$start->format('Y-m-d');
而($mon格式('Y-m-d');
foreach($天作为$天){
$date=新的日期时间($day$of”);
如果($日期<$开始){
继续;
}
如果($date>$end){
破口2;
}
$dates[]=$date;
}
$mon->add(新的日期间隔('P2W'));
} 
返回$日期;
}
用法:

$start=新日期时间('2017-05-23');
$end=新日期时间('2017-06-21');
$dates=每两周($start,$end,['tue','wed','sat']);
输出:

2017-05-23 Tue 2017-05-24 Wed 2017-05-27 Sat 2017-06-06 Tue 2017-06-07 Wed 2017-06-10 Sat 2017-06-20 Tue 2017-06-21 Wed 2017-05-23星期二 2017-05-24星期三 2017-05-27周六 2017-06-06星期二 2017-06-07星期三 2017-06-10周六 2017-06-20星期二 2017-06-21星期三
演示

你是指星期二和星期三还是星期三和星期四?你的星期三和星期四是前后颠倒的:)@fubar更新问题!@Victor Sooo,你现在是说你希望从开始日期到年底的每个太阳、星期三和星期五都在一个一维数组中?每两周的星期二和星期三发生了什么事?你确定你知道你的要求吗?你是指星期二和星期三还是星期三和星期四?你的星期三和星期四从后到前:)@fubar更新问题@Victor Sooo,你是说你希望从开始日期到年底的每个太阳、周三和周五都在一个一维数组中?每两周的星期二和星期三发生了什么?你确定你知道你的要求是什么吗?