2010-01-26 9 views
7

우리는 2 일 (영업일 기준) SLA를 기준으로 서비스를 실행하므로 월요일 오후 1시에 요청을 제출하면 수요일 오후 1 시까 지 완료해야합니다.PHP는 두 날짜 사이의 근무 시간 수를 계산합니다

그래서 MySQL 데이터베이스에는 YYYY/MM/DD HH : MM : SS라는 두 개의 MySQL 타임 스탬프가 있고 근무 시간 기준으로 오전 9 시부 터 오후 5 시까 지의 근무 시간을 기준으로 두 날짜 간의 시간을 계산하는 방법이 필요합니다.

아무도 나에게 아이디어를 줄 수 있습니까? 일반적인 용어로

답변

0

, 주어진 타임 스탬프 A와 A는 시작 시간입니다 B :

  • A와 B 사이의 일 수를 결정합니다 (이 작업을 수행하는 쉬운 방법이있다)이,이 D 전화
  • 시간 소인 B에 대한 HH : MM : SS가 A에 대한 HH : MM : SS보다 크거나 같으면 H (시간) + H (시간)를 더합니다.
  • HH : B가 A보다 작 으면 D에서 1을 뺀 후 시간 차이 H에서 8 시간을 더한 후 D - 1 (일) + 8 시간을 더합니다 - H

예에서 A가 월요일 오후 1 시이고 B가 수요일 오후 1 시일 경우 D는 2입니다. 시간이 동일하므로 H가 0이므로 총 차이는 2 일입니다.

B가 수요일 오후 3 시인 경우 총 차이는 2 일 더하기 2 시간입니다.

B가 9am 수요일이면 총 차이는 1 일에 4 시간이됩니다.

위의 방법은 주말이나 공휴일을 처리하지 않으므로 적절한 수정을해야합니다.

1

가장 간단한 방법은 당일에 사용할 수있는 근무 시간을 포함하여 매일 한 줄씩 데이터베이스에 데이터베이스를 저장하는 것입니다. 이를 통해 공휴일과 주말을 높은 세분화로 처리 할 수 ​​있으며 사용자가 지정한 두 날짜 사이의 일 동안 합계를 실행하여 사용 가능한 시간을 알 수 있습니다.

0

SQL을 통해서만 생성하는 것은 어렵습니다. MySQL의에서 타임 스탬프의 차이는 ...

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T; 

을 그런 식으로 계산할 수있다 ...하지만 그 OFC는 고려 어떤 근무 시간을 고려하지 않습니다.

SQL 은 근무 시간이에 미치지 않으며, 주말, 공휴일 또는 기타 다른 요소에도 의존 할 수 있습니다. 이를 완료하려면 먼저 캘린더 테이블을 설정 한 다음 계산을 시작해야합니다.

나는 몇 년 전에 비슷한 문제가 있었는데, 거기에는 시간과 휴일을 정의한 백엔드 스크립트를 사용했다. 그런 다음 데이터를 삽입하는 동안 미래의 타임 스탬프를 계산했습니다. 훨씬 쉽고 유연했습니다.

관련 문제