Количество прошедших лет - Рассмотрим високосный год - PullRequest
1 голос
/ 05 января 2010

В нашей системе управления персоналом мы хотим рассчитать количество лет, в течение которых сотрудник служил компании.

У нас есть дата присоединения в столбце 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.

Есть идеи по этому поводу? Спасибо.

Ответы [ 2 ]

7 голосов
/ 05 января 2010

Ваш метод кажется излишне окольным способом для вычисления этого. Как насчет этого (псевдокод):

years = current_date.year - start_date.year
if current_date.mmdd < start_date.mmdd:
    years = years - 1
0 голосов
/ 05 января 2010

Вы насчитали 365,4 дня в году, что явно неправильно. Если вы измените это значение на 365.26 (31558464), високосные годы будут автоматически включены в долгосрочную перспективу, но не, если этот период короче 4 лет. Это в ваших интересах, но не в интересах ваших сотрудников.

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

$servicePeriod = floor($servicePeriod);
...