2013-06-09 4 views
0

저는 비즈니스 일 계산을 훌륭하게 처리하는 일종의 PHP API를 찾기 위해 웹에서 인터넷 검색을하고 있습니다. 내가 도움이되었다 stackoverflow에 answers and code snippets 번호를 발견했지만 주어진 날짜 (예 : 주말 가을 가을 처리)에 필요한 특정 기능이 부족한 근무일을 추가 처리하는 코드를 발견하고 그것을 기반으로 사용자 정의하기가 어려웠습니다 주어진 애플리케이션의 필요성.PHP 클래스로 업무 일수 계산하기

그래서 마침내 글 머리 기호를 물고 내 자신의 솔루션을 작성하기로 결정했습니다. 내가 작성한 클래스는 작년에 작성한 유사한 (그리고 더 단순한) Java 클래스에서 사용 된 논리뿐만 아니라 stackoverflow (James Pasta++)에서 찾은 코드를 통합합니다. 나는 누군가에게이 개념을 가지고있는 것과 같은 좌절감을 만나고 그것을 유용한 해결책으로 생각할 때를 대비하여 Q/A 스타일을 게시하고있다.

1) 제공된 날짜에 영업일을 추가하고 2) 두 날짜 간의 영업일을 계산하는 두 가지 기본 문제가 있습니다. 이러한 문제를 해결할 때 가장 염려되는 점은 사용의 용이성과 확장 성이었습니다. 효율적으로 작성된 곳이 많지 않습니다. 문제가된다면 코드의 일부를 확실히 리팩토링 할 수 있지만 최소한 내 용도로는 앞으로 수천 일 (영업일 기준)을 계산하지 않을 것입니다 :-)

샘플 코드 및 소스에 대한 링크는 아래 답변에 나와 있습니다. 피드백과 개선은 환영받을 만합니다.

답변

0

The Code

이 라이브러리의 기본 개념은 날짜가 BusinessDay 객체로 래핑됩니다이다; 그런 다음 다른 날짜와 비교 (또는 비교)하거나 영업일에 add() 또는 subtract()를 할 수 있습니다. 라이브러리에 제공된 모든 날짜는 strtotime()에 의해 허용되는 날짜 문자열, UNIX 타임 스탬프, 다른 BusinessDay 객체 또는 null (현재 시간을 나타냄) 중 하나 일 수 있습니다.

BusinessDay 개체는 새 문이나 wrapBusinessDay()라는 함수를 통해 인스턴스화 할 수 있습니다. 후자의 옵션을 사용하면 코드를 간결하게 유지하는 데 도움이되는 인스턴스 생성시 메소드 체인을 사용할 수 있습니다. 아래 샘플 코드를 참조하십시오.

샘플 코드 :

// add a business day to today 
$ship_date = wrapBusinessDay(time())->add(1); 

// find # of business days until required date 
$required_date = '6/24/2013'; 
$difference = $ship_date->difference($required_date); 

// panic?! 
if ($difference < 10) { 
    echo "Uh-oh, we'll need expedited shipping!\n"; 
} else { 
    echo "Whew! we're safe.\n"; 
} 

// specify custom holidays 
$arr_matey = wrapBusinessDay('2013-09-18', array(
    '2013-09-19' 
))->add(1); 

// specify custom formats 
echo $arr_matey . "\n";      // prints '2013-09-20 00:00:00' 
echo $arr_matey->dateFormat('m~d~Y') . "\n"; // prints '09~20~2013' 

이 라이브러리에 더 있어요,하지만 그것의 요점입니다. 이것이 누군가 다른 사람을 약간 구할 수 있기를 바랍니다! ~ 네이트

+0

매우 좋음 .. 그러나이 해결책은 평일에 관찰 된 주말의 공휴일을 설명하지 않습니다 ... 참고로 – EGriff