Автоматическое увеличение числа (стаж работы) в определенный день каждый год.
Доброго времени суток.
На сайте есть раздел с преподавательским составом. В информации про преподавателя есть пункт «стаж», записанный таким образом:
Пока что дошел до такого:
• Создал новый сниппет, в котором, определяю текущую дату и сравниваю её с нужной датой. Затем увеличиваю число стажа, если дата подходит (так же в нём записана функция, которая в зависимости от числа подставляет слово «год» в правильно склонении – 1 год; 12 лет и т.д.):
Можно ли это дело сделать так что бы срабатывало на стороне сервера в определенный день и даже, если пользователь зайдет месяц (условно) спустя, то увидит уже новый стаж? Желательно без использования БД…
На сайте есть раздел с преподавательским составом. В информации про преподавателя есть пункт «стаж», записанный таким образом:
<p>пед. стаж: <span style="font-family:georgia,serif;"><em><strong>12 років</strong></em></span></p>Каждый год, как вы понимаете, стаж увеличивается. Подскажите как бы правильно это дело автоматизировать.Пока что дошел до такого:
• Создал новый сниппет, в котором, определяю текущую дату и сравниваю её с нужной датой. Затем увеличиваю число стажа, если дата подходит (так же в нём записана функция, которая в зависимости от числа подставляет слово «год» в правильно склонении – 1 год; 12 лет и т.д.):
<?php
$oldStazh; //текущий стаж, записанный вручную
$todayYear = date('Y');
$mustBeDate = '01.06';
$todayDate = date('d.m'); //день, когда стаж должен увеличиться
$stazh = $oldStazh + $todayYear - 2020; //новый стаж
if ($mustBeDate == $todayDate) $stazh++; //увеличиваем стаж, если сегодня 01.06
//функция для того что бы правильное окончание выдавало в слове "год"
if (!function_exists('format_by_count')) {
function format_by_count($stazh)
{
if($stazh % 10 == 1 && $stazh % 100 != 11)
return 'рік';
if($stazh % 10 >= 2 && $stazh % 10 <= 4 && ($stazh % 100 < 10 || $stazh % 100 > 20))
return 'роки';
return 'років';
}
}
return $stazh . ' ' . format_by_count($stazh);• На странице где нужно выводить информацию о стаже вызываю созданный сниппет и передаю туда значение стажа на текущий год:<p>пед. стаж: <span style="font-family:georgia,serif;"><em><strong>[[!pedStazh? &oldStazh=`25`]]</strong></em></span></p>Поигрался на локальной копии меняя время в системе. Ставлю точную дату 01.06.2020 – стаж увеличивается. Ставлю 01.06.2021 – стаж увеличивается ещё на 1. Но если поставить дату 01.07.2020 стаж возвращается к значению $oldStazh. И если я правильно понимаю, то изменение срабатывает только для того пользователя, который зашел на страницу.Можно ли это дело сделать так что бы срабатывало на стороне сервера в определенный день и даже, если пользователь зайдет месяц (условно) спустя, то увидит уже новый стаж? Желательно без использования БД…
Комментарии: 8
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Т.е. у каждого преподавателя должна быть дата, от которой нужно отсчитывать стаж, а затем нужно банально вычесть эту дату из текущей, округлив до лет.
Подсчитывать такие вещи через крон на сервере — лишняя головная боль.
Но стаж увеличивается в любой день и месяц, если год больше $startYear. Мне нужно что бы работало так:
допустим учитель начал работать в 1990 году. Значит на 02.06.2020 у него стаж 30 лет. И на 15.02.2021 всё ещё 30 лет. 31 год должен стать только после 01.06.2021. А сейчас 31 год становится, если ставлю дату, например, 15.04.2021.
На выходе получаешь точное количество лет опыта.
Уровень владения MODX и php у меня ещё очень низкий :(
А за итоговое число лет отвечает $diff, правильно? Пытался подставить в функцию format_by_count, но не работает. Вообще не выводит ни одного слова.
Подробнее можно почитать тут и тут.
вместо
пишешь