Я пытаюсь получить каждый рабочий день недели по диапазону (не включая субботу и воскресенье), например, используя этот код, чтобы показывать последние "майские дни":
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
Пожалуйста помоги,
Я сделал некоторые изменения в вашем коде, это поможет вам
Я добавляю подтверждение, если дата является субботой (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'));
}
}
?>
$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() первый и последний день текущей недели. Думаю, можно сделать короче и лучше.