2015-08-05 2 views
1

Im пытаются получить каждый день недели работы по диапазону (не включая субботу и воскресенье), например, им с помощью этого кода, чтобы показать последние «может» дни: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 ($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 

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

ответ

1

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

добавить проверку, если дата субботе (5) и воскресенье (6), а затем напечатать первый диапазон в неделю, это помогает мне добавить +3 дня ifit - суббота и +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

Можете ли вы объяснить свои изменения, что вы изменили и почему? – Martin

+0

дает мне этот результат: 2015-05-01-2015-05-01 2015-05-04-2015-05-08 .. и т. Д. Спасибо – simpleton

+0

@Martin Надеюсь, что объяснение поможет вам – bicho

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 не работает, а ваш на. произведение. – DanFromGermany

Смежные вопросы