PHP date рассчитать дату между двумя днями

Я хочу узнать количество выходных и количество рабочих дней только по знакомым $startDate а также $endDateЕсть ли какая-либо функция PHP, которая может рассчитывать автоматически?

Это мой код:

 $endDate = strtotime($endDate);
$startDate = strtotime($startDate);
echo $days = ($endDate - $startDate) / 86400 + 1;

Мой код вернет, сколько дней, и как мне нужно больше, это какой день?
Как я могу получить это?

Пример:

startDate:`2014-11-17`

endDate:`2014-11-19`

Я хочу этот вывод:

it's 3 day
2014-11-17 is Monday
2014-11-18 is Tueday
2014-11-19 is Wendnesday

1

Решение

Как насчет…

for ($time = $startDate; $time <= $endDate; $time += 86400) {
echo date('Y-m-d \i\s l', $time) . '<br>';
}
1

Другие решения

Это может помочь вам, или, по крайней мере, может дать вам некоторую подсказку

$endDate = strtotime($endDate);
$startDate = strtotime($startDate);
echo $days = ($endDate - $startDate) / 86400 + 1;
$time = $startDate;
while ($time <= $endDate) {
echo date('Y-m-d', $time) . ' is ' . date('l', $time);
$time += 86400;
}
if ($time != $endDate) {
echo date('Y-m-d', $time) . ' is ' . date('l', $time);
}
0

Это должно работать для вас:

<?php

$startDate = strtotime("2014-11-17");
$endDate = strtotime("2014-11-19");

echo "It's " . $days = ($endDate - $startDate) / 86400 + 1 . " days";

for($count = 0; $count < $days; $count++)
echo "<br />" . date('Y-m-d', strtotime('+' . $count . ' day', $startDate)) . ' is ' . date('l', strtotime('+' . $count . ' day', $startDate));

?>

Выход:

It's 3 days
2014-11-17 is Monday
2014-11-18 is Tuesday
2014-11-19 is Wednesday
0

Там нет встроенного. В Excel есть NETWORKDAYS (), но в PHP вы должны свернуть свои собственные.

Есть решение PHP на Разница в день без выходных
Обратите внимание на его ограничения в комментариях, например. если праздничный день выпадает на выходной день.

На следующей странице описывается альтернативная реализация NETWORKDAYS (): http://www.cpearson.com/excel/betternetworkdays.aspx
Это не PHP, но это демонстрирует логику.

К сожалению, нет другого пути, кроме циклического прохождения каждого дня в периоде и принятия решения о том, стоит ли считать его. Вам необходимо принять аргументы для (или жестко заданного кода) выходных дней и дат любых государственных праздников (если вы исключаете праздничные дни).

Если вы делаете это часто и в течение длительных периодов, вы можете предварительно рассчитать и кэшировать количество рабочих дней для каждого календарного месяца и года; затем во время выполнения вы просматриваете количество дней в каждом целом году в течение периода, затем оставшиеся целые месяцы, а затем выполняете обычный цикл для оставшихся дней в начале и в конце периода.

РЕДАКТИРОВАТЬ: Если вы просто хотите исключить выходные (не праздничные дни), то вы можете рассчитать 5 дней для каждой целой недели в периоде, а затем рассчитать оставшиеся дни: https://github.com/bgarlock/scripts/blob/master/PHP%20Equivalent%20of%20MS%20Excel%20NETWORKDAYS%20function.php

0

Пожалуйста, найдите ниже код, я уверен, что это работает для вас

ПРИМЕЧАНИЕ. Переданный параметр P1D обозначает разницу в 1 день, также как вы можете передать P1M за 1 месяц, P1W за 1 неделю и P1Y за 1 год.

$date1 = '29/08/2013';
$date2 = '03/09/2013';

function returnDates($fromdate, $todate) {
$fromdate = \DateTime::createFromFormat('d/m/Y', $fromdate);
$todate = \DateTime::createFromFormat('d/m/Y', $todate);
return new \DatePeriod(
$fromdate,
new \DateInterval('P1D'),
$todate->modify('+1 day')
);
}

$datePeriod = returnDates($date1, $date2);
foreach($datePeriod as $date) {
echo $date->format('d/m/Y'), PHP_EOL; //you can set any date format here
}
-1
По вопросам рекламы [email protected]