2010-01-05 5 views
1

HR 시스템에서는 직원이 회사를 근무한 연도 수를 계산하려고합니다.년 수 - 윤년을 고려하십시오

우리가 가진 것은 TIMESTAMP 열의 가입 날짜입니다.

$timeNow = time(); // current time 
$joinDate = strtotime($users->fields['date_of_joining']); // from database 
$servicePeriod = $timeNow - $joinDate; // in seconds 
$servicePeriod = $servicePeriod/31570560; // in years 

그러나 이것은 고려 사항으로 도약 년이 걸릴 것입니다 : 내가 뭐하는 거지

은? 직원이 Feb 27 윤년에 가입하고 내년에 March 1으로 상태를 확인하는 경우 그는 1 year이 아니라 1 year and 1 day의 서비스로보고되어야합니다.

이것에 대한 아이디어가 있습니까? 감사.

답변

7

귀하의 방법은 이것을 계산하는 불필요한 원형 교차로처럼 보입니다. 어때요? (의사 코드) 어때요? :

years = current_date.year - start_date.year 
if current_date.mmdd < start_date.mmdd: 
    years = years - 1 
+0

있다고. –

+0

그건 훌륭한 논리 중 하나입니다! 정말 고맙습니다! – Nirmal

0

분명히 틀린 1 년 365.4 일로 계산했습니다. 365.26 (31558464)으로 변경하면 윤년이 자동으로 장기간에 포함되지만 기간이 4 년 미만인 경우에는 포함되지 않습니다. 이것은 당신 자신의 이익이지만 직원들에게는 이익이 아닙니다.

또한, 완성 일까지의 수를 반올림하는 마지막 줄을 추가 : 내가 너무 나이를 계산하는 방법을

$servicePeriod = floor($servicePeriod); 
+1

나는 잘못된 값을 선택하기 위해 OP를 chastised하는 것을 좋아합니다. 그리고 나서 당신 자신의 * 잘못된 값을 사용했습니다 :-) 그것은 365.2425로 4/100/400 규칙들을 처리합니다. – paxdiablo

+0

paxdiablo, 요즘 최고의 가치는 아마도 365.25 일 것입니다 :-) –