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,你是说你希望从开始日期到年底的每个太阳、周三和周五都在一个一维数组中?每两周的星期二和星期三发生了什么?你确定你知道你的要求是什么吗?