У меня есть дата, как этотКак рассчитать дату выходные в PHP
$start = strtotime('2010-01-01'); $end = strtotime('2010-01-25');
Мой вопрос:
Как я могу вычислить или рассчитывать выходные от $ начала & $ диапазон дат конца ..? ?
У меня есть дата, как этотКак рассчитать дату выходные в PHP
$start = strtotime('2010-01-01'); $end = strtotime('2010-01-25');
Мой вопрос:
Как я могу вычислить или рассчитывать выходные от $ начала & $ диапазон дат конца ..? ?
Более современный подход использует РНР Класс DateTime. Ниже вы получаете массив с номерами недели в виде ключей. Я добавил количество недель и выходных дней.
<?php
$begin = new DateTime('2010-01-01');
$end = new DateTime('2010-01-25');
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval, $end);
$weekends = [];
foreach($daterange as $date) {
if (in_array($date->format('N'), [6,7])) {
$weekends[$date->format('W')][] = $date->format('Y-m-d');
}
}
print_r($weekends);
echo 'Number of weeks: ' . count($weekends);
echo 'Number of weekend days: ' . (count($weekends, COUNT_RECURSIVE) - count($weekends));
Примечание: если вы используете PHP 5.3, используйте array()
вместо блочных массивов []
.
Может быть, этот фрагмент кода поможет:
<?php
//get current month for example
$beginday = date("Y-m-01");
$lastday = date("Y-m-t");
$nr_work_days = getWorkingDays($beginday, $lastday);
echo $nr_work_days;
function getWorkingDays($startDate, $endDate)
{
$begin = strtotime($startDate);
$end = strtotime($endDate);
if ($begin > $end) {
echo "startdate is in the future! <br />";
return 0;
} else {
$no_days = 0;
$weekends = 0;
while ($begin <= $end) {
$no_days++; // no of days in the given interval
$what_day = date("N", $begin);
if ($what_day > 5) { // 6 and 7 are weekend days
$weekends++;
};
$begin += 86400; // +1 day
};
$working_days = $no_days - $weekends;
return $working_days;
}
}
Другим решением может быть: (Get date range between two dates excluding weekends)
Также это будет полезно: (http://stackoverflow.com/questions/3352712/get-date-range-between-two-dates-excluding-weekends) –
Это может помочь, может быть:
$start = strtotime('2010-01-01');
$end = strtotime('2010-01-25');
$differ = $end-$start;
$min = $differ/60;
$hrs = $min/60;
$days = $hrs/24;
$weeks = $days/7;
if(is_int($weeks))
$weeks++;
echo '<pre>';
print_r(ceil($weeks));
echo '</pre>';
hy, pritesh Я попытался использовать ваш код, но не работа для меня Я постараюсь с даты ** $ start = strtotime ('2016-01-01'); $ end = strtotime ('2016-01-08'); ** и результат должен быть ** 2 ** не ** 1 ** – b4dQuetions
ok, так что вы не хотите, чтобы количество выходных дней, но число выходных дней в месяц. ..я прав?? – pritesh
Hy pritesh yah ** номер выходного дня в месяц ** – b4dQuetions
hy Schellingerht благодарит вас за ответ, но у меня есть quetion о вашем коде, что значение ** новый DateInterval ('P1D'); ** – b4dQuetions
DateInterval - это шаги в ассортимент. P1D означает на шаг 1 день. Потому что вы не знаете, до какого числа день начала дня. В цикле foreach каждый день от начала до конца проходит. Затем я проверяю, является ли число дней 6 (суббота) или 7 (воскресенье). – schellingerht
Привет @ bd4dQuetions. Ницца! Пожалуйста, отметьте правильный ответ для людей с одинаковой проблемой ;-) – schellingerht