2014-11-19 2 views
1

주말의 수와 bussiness 일 수를 알고 싶습니다만 $startDate$endDate을 알고 있습니다. 자동 계산할 수있는 PHP 함수가 있습니까?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 

답변

0

, 또는 적어도 몇 가지 단서에 대한

$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); 
} 
1

방법을 제공 할 수 있습니다 ...

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

나는 단지 그것을 테스트 잘 작동합니다. – rjdown

+0

예, 내 동생이 일하고 있습니다. 사과 :) –

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 
-1

나는 그것이 작동 확신 코드를 검색하면

참고 : 매개 변수는 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 
} 
0

내장은 없습니다. Excel에는 NETWORKDAYS()가 있지만 PHP에서는 자신의 롤을 사용해야합니다.

PHP 솔루션이 Day difference without weekends 에 있습니다. 공휴일이 주말 낮에있는 경우.

다음 페이지에서는 NETWORKDAYS()의 대체 구현을 설명합니다. http://www.cpearson.com/excel/betternetworkdays.aspx 이것은 PHP가 아니지만 논리를 보여줍니다.

기간 중에 매일 반복하여 계산할지 여부를 결정하는 것 외에는 지름길이 없습니다. 주말 및 공휴일 날짜에 대한 인수 (또는 하드 코드)를 수락해야합니다 (공휴일을 제외하는 경우).

이 작업을 자주 수행하는 경우 오랜 기간 동안 각 달 및 영업일의 영업일 수를 미리 계산하고 캐시 할 수 있습니다. 런타임에, 당신은 그 기간 내에서 1 년 동안의 일수를 조사한 다음 나머지 전체 달을 검색 한 다음, 그 기간의 시작과 끝에서 남은 날들에 대해 일반 루프를 수행합니다.

편집 : 그냥 주말 (안 공휴일)을 제외 할 경우, 당신은 남아있는 일을 계산 한 다음 기간에 각 전체 주 5 일을 계산하고 있습니다 : https://github.com/bgarlock/scripts/blob/master/PHP%20Equivalent%20of%20MS%20Excel%20NETWORKDAYS%20function.php

관련 문제