PHP скрипт, определяющий сколько лет организации


28-08-2018
Денис Л.
Php
3
1869
PHP скрипт, определяющий сколько лет организации

Сегодня была поставлена задача поменять количество лет, которые исполнились нашей организации в слайдере на главной странице. В частности, в слайдере стояла фраза "22 года на рынке экспертных услуг". Следовательно, нужно было сделать 23. Как и любой уважающий себя программист, я очень люблю автоматизировать все рутинные процессы. А особенно те, которые можно забыть. Ведь не так просто помнить каждый год, что в определённую дату нужно поменять одну цифру в нескольких местах кода.

И я написал скрипт, который определяет текущую дату, считает, сколько лет организации, и выводит всё с учётом падежей русского языка.

Скрипт тестировал на любых датах, которые выводят от 1 года и до 110 лет.

В частности, строка текста сейчас выглядит так:

<?=getFullExperience()?> на рынке экспертных услуг

И выводит в нашем случае, на текущий момент времени: "23 года на рынке экспертных услуг".

Когда компании будет 25 лет, будет выведено: "25 лет..." и так далее.

Итак, как автоматизировать подсчёт лет для организации (или человека)

Первым делом обратим внимание на особенности падежей русского языка по отношению к годам. В частности, если число не находится в интервале от 11 до 14, то любое число, оканчивающее на '0', '5', '6', '7', '8', '9' будет читаться как 'лет'. Т.е., 'тридцать лет, сорок пять лет' и т.д. Любое число, оканчивающее на '1' (опять же, если число не в интервале от 11 до 14), будет читаться как 'год'. Например: 'один год, двадцать один год' и т.д. И любое число (кроме обозначенного выше интервала), оканчивающее на '2', '3', '4', будет читаться как 'года'. Например, '32 года, 2 года' и т.д. Особенности возникают только с числами '11', '12', '13', '14', поскольку они не попадают ни под одно правило выше. И всегда читаются вместе со словом 'лет'.

Ниже привожу скрипт, с комментариями.


<?
    function getFullExperience() {

        // вводим дату основания компании. Я для примера ввёл дату своего рождения
        // чтобы избежать ошибок при вводе цифр с ведущим нулём, например, '05',
        // мы принимаем числа в качестве строк и преобразовываем их в число с помощью intval()
        $dayBirth = intval('29');
        $monthBirth = intval('05');
        $yearBirth = intval('1983');

        // определяем текущий год, месяц, день
        $dayNow = date('d'); $monthNow = date('m'); $yearNow = date('Y');

        // если текущий месяц больше месяца основания компании
        // или если текущий месяц равен месяцу основания и при этом текущий день больше или равен дню основания
        if($monthNow > $monthBirth || ($monthNow == $monthBirth && $dayNow >= $dayBirth)) {
            $fullExperience = $yearNow - $yearBirth; // количество лет равно текущему году минус год основания
        }
        else { // в противном случае, количество лет меньше на 1
            $fullExperience = $yearNow - $yearBirth - 1;
        }

        // далее формируем текст 'года', 'лет' или 'год'
        // если число лет находится в интервале от 11 до 14, то всегда будем прибавлять слово 'лет'
        if($fullExperience >= 11 && $fullExperience <= 14) {
            $dayText = 'лет';
        }
        else { // для всех остальных чисел
            // записываем в переменную $dayText последнее число в наборе цифр
            // т.е., если число состоит из двух цифр - записываем последнюю
            // если число из одной цифры - то она и так будет последней
            // Для этого сначала преобразуем число опыта в строку функцией strval()
            // затем берём последний символ строки, например: $fullExperience[1]
            $dayText = strval($fullExperience)[strlen($fullExperience)-1];
            if($dayText == 2 || $dayText == 3 || $dayText == 4) {
                $dayText = 'года';
            }
            elseif($dayText == 1) {
                $dayText = 'год';
            }
            else {
                $dayText = 'лет';
            }
        }

        return $fullExperience.' '.$dayText;
    }
?>

Пример вызова функции в html коде:

<p>Наша компания работает уже <?=getFullExperience()?> на рынке экспертных услуг</p>

Будет выведено, например: 'Наша компания работает уже 23 года на рынке экспертных услуг'


Кстати, для любителей объектно-ориентированного стиля ещё есть такой вариант расчёта даты:

<?
$now = new DateTime();
$company_birth = new DateTime('29-05-1983');
$diff = date_diff($now, $company_birth);
echo $diff->format('%y');
?>

Буду рад, если Вашему сайту пригодится данный скрипт!

Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
Web development blog!

Читайте также:

Форма на PHP с безопасной загрузкой файлов на сервер

Ставим надёжную защиту от спама на сайте своими силами

Отправка писем через SMTP Яндекса, Google, Mail, используя Swift Mailer