PHP эхо диапазон рабочих дней каждой недели

1

Я пытаюсь получить каждый рабочий день недели по диапазону (не включая субботу и воскресенье), например, используя этот код, чтобы показывать последние "майские дни":

echo  date("Y-m-d", mktime(0, 0, 0, date("m")-3, 1, date("Y"))); 
echo ' to '; 
echo  date("Y-m-d", mktime(0, 0, 0, date("m")-2, 0, date("Y")));
echo '</br>';

$from_ = date("Y-m-d", mktime(0, 0, 0, date("m")-3, 1, date("Y")));
$top_ = date("Y-m-d", mktime(0, 0, 0, date("m")-2, 0, date("Y")));
$next_date = $from_;
while ($next_date != $top_) {
  if (date('N',strtotime($next_date)) < 6) echo $next_date."\n";
  echo '</br>';
  $next_date = date('Y-m-d', strtotime($next_date.' +1 day'));
}

это дает мне этот результат:

2015-07-01 to 2015-07-31

2015-05-01 

2015-05-04 
2015-05-05 
2015-05-06 
2015-05-07 
2015-05-08 

2015-05-11 
2015-05-12 
2015-05-13 
2015-05-14 
2015-05-15 

2015-05-18 
2015-05-19 
2015-05-20 
2015-05-21 
2015-05-22 

2015-05-25 
2015-05-26 
2015-05-27 
2015-05-28 
2015-05-29 

Я хотел бы получить этот результат:

2015-07-01 to 2015-07-31

2015-05-01 to 2015-05-01

2015-05-04 to 2015-05-08 

2015-05-11 to 2015-05-15 

2015-05-18 to 2015-05-22 

2015-05-25 to 2015-05-29 

Пожалуйста помоги,

Теги:

2 ответа

1
Лучший ответ

Я сделал некоторые изменения в вашем коде, это поможет вам

Я добавляю подтверждение, если дата является субботой (5) и воскресеньем (6), а затем печатает первый диапазон недели, это помогает мне добавлять дни +3, если это суббота и +2, если это воскресенье (в конец); посередине, если дата находится между неделей, вы эхо о первом дате и добавляете +4 дни, чтобы повторить диапазон недели

<?php
echo  date("Y-m-d", mktime(0, 0, 0, date("m")-3, 1, date("Y"))); 
echo ' to '; 
echo  date("Y-m-d", mktime(0, 0, 0, date("m")-2, 0, date("Y")));
echo '</br>';

$from_ = date("Y-m-d", mktime(0, 0, 0, date("m")-3, 1, date("Y")));
$top_ = date("Y-m-d", mktime(0, 0, 0, date("m")-2, 0, date("Y")));
$next_date = $from_;
while (strtotime($next_date) <= strtotime($top_)) 
{  
  if (date('N',strtotime($next_date)) == 5 ||date('N',strtotime($next_date)) == 6)
  {
    echo $next_date."-".$next_date;
  }
  else
  { 

    $nd=date('Y-m-d', strtotime($next_date.' +4 day'));
    echo $next_date."-".$nd."\n";
    $next_date=$nd;
  }
  echo '</br>';
  if (date('N',strtotime($next_date)) == 5)
  {
    $next_date = date('Y-m-d', strtotime($next_date.' +3 day'));
  }
  if (date('N',strtotime($next_date)) == 6)
  {
    $next_date = date('Y-m-d', strtotime($next_date.' +2 day'));
  }
}
?>
  • 0
    Можете ли вы объяснить свои изменения, что вы изменили и почему?
  • 0
    дает мне этот результат: 2015-05-01-2015-05-01 2015-05-04-2015-05-08 .. и т. д. спасибо
Показать ещё 5 комментариев
0
 $arr = array(); $i = 0;
 while ($next_date != $top_) {
  $d=date('N',strtotime($next_date));
  if ($d < 6) $arr[$i][] = $next_date;
  else if($d==7) $i++;
  $next_date = date('Y-m-d', strtotime($next_date.' +1 day'));
}
echo min($arr[0])." to ".max($arr[0]);#0,1,2

Попробуй это! Здесь я сначала собираю всю дату от 1-5 (день в неделю) в вспомогательных массивах, поэтому я могу перебирать каждую неделю. Чем я получаю от каждого subarray через max()/min() первый и последний день текущей недели. Думаю, можно сделать короче и лучше.

  • 1
    Пожалуйста, добавьте объяснение к вашему ответу, почему код OPs не работает, а ваш против работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню