PHP - Получить даты следующих 5 рабочих дней?
Я пытаюсь создать массив из следующих 5 рабочих дней недели (понедельник - пятница, исключая сегодня). Я знаю, что рабочая неделя меняется по всему миру, но это не важно для того, что я пытаюсь сделать.
Так, например, если сегодня среда, я хочу, чтобы даты четверга и пятницы текущей недели и понедельника, вторника и среды следующей недели.
Я думал, что это будет работать:
$dates = array();
for ($i = 1; $ < 6; $i ++)
{
$dates[] = date('Y-m-d', strtotime('+ '.$i.' weekday'));
}
Но на сегодня это дает мне:
- 1-й понедельник
- Вторник 2й
- Среда 3-я
- Четверг 4
- Воскресенье 7-е!
Любой совет приветствуется.
Спасибо
4 ответа
Решение
Попробуй это
$dates = array();
$date = new DateTime();
while (count($dates)<5)
{
$date->add(new DateInterval('P1D'));
if ($date->format('N')<6)
$dates[]=$date->format('Y-m-d');
}
function getWeekdayDatesFrom($format, $start_date_epoch, $end_date_epoch, $range) {
$dates_arr = array();
if( ! $range) {
$range = round(abs($start_date_epoch-$end_date_epoch)/86400) + 1;
} else {
$range = $range + 1; //end date inclusive
}
$current_date_epoch = $start_date_epoch;
for($i = 1; $i <= $range; $i+1) {
$d = date('N', $current_date_epoch);
if($d <= 5) { // not sat or sun
$dates_arr[] = "'".date($format, $current_date_epoch)."'";
}
$next_day_epoch = strtotime('+'.$i.'day', $start_date_epoch);
$i++;
$current_date_epoch = $next_day_epoch;
}
return $dates_arr;
}
$now = time();
$day = 60*60*24;
$days = array();
for ($i=1; $i<=7; $i++){
$ts = $now + $day*$i;;
if (date("N", $ts) < 6){
$days[] = date("l jS", $ts);
}
}
Выход:
Array(
[0] => Monday 1st
[1] => Tuesday 2nd
[2] => Wednesday 3rd
[3] => Thursday 4th
[4] => Friday 5th
)
Это должно работать:
$dates = array();
$i = 0;
while(true) {
$i++;
$time = strtotime("+$i days");
$dayOfWeek = date('w', $time);
/* 'w' - day of week, numeric, i.e. "0" (Sunday) to "6" (Saturday) */
if( ($dayOfWeek == 0) or ($dayOfWeek == 6) ) {
continue;
}
$dates[] = date('Y-m-d', $time);
if( count($dates) >= 5 ) {
break;
}
}