IsBithdaySoon( birthday ; daysinterval )

Законченные решения. Заполняется по результатам дискуссий в «Практике».
Ответить
Alexei Sytch
Сообщения: 46
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

IsBithdaySoon( birthday ; daysinterval )

Сообщение Alexei Sytch » 22 янв 2018, 21:32

НАЗНАЧЕНИЕ
Для напоминания о приближающихся днях рождения начинает показывать обратный отсчет за нужное количество дней дней.

ФОРМАТ
IsBithdaySoon( birthday ; daysinterval )
birthday - поле днем рождения
daysinterval - интервал для начала предупреждения

ЗАВИСИМОСТИ
Для работы нужна пользовательская функция PluralFormCyr

ИДЕИ ДЛЯ ИСПОЛЬЗОВАНИЯ
Удобно поместить в список контактов для того чтобы успеть подготовиться и поздравить.
Экономит место на экране, так как показывает только когда до дня рождения остается заданное количество дней. Можно разместить под/над фотографией контакта

Код: Выделить всё


/*
Функция: IsBithdaySoon( birthday ; daysinterval )
Назначение: Для напоминания о приближающихся днях рождения начинает показывать обратный отсчет за нужное количество дней. 
Автор: Алексей Сыч
Версия: 1
Дата обновления: 23.01.2018
Зависимости: Для работы нужна пользовательская функция PluralFormCyr
*/


Let([

CurrentDate=Get(CurrentDate);
birthday=GetAsDate(birthday);
birthdayThisYear= Date (Month(birthday);Day(birthday); Year(CurrentDate) );

daysToBirthday= birthdayThisYear - CurrentDate ;
IsSoon=(0<=daysToBirthday and daysToBirthday<=daysinterval);

text=If( IsSoon ;                  // скоро ДР
             Choose(
                          Min(3;daysToBirthday);  //обрезаем до 3 все варианты для выбора - 4 варианта начинаются с 0

/* ноль -- сегодня,  один - через день, два -- через два дня, 
три -- все остальные случаи*/

"⚜ сегодня"; 								
"завтра день рождения";						
"послезавтра будет день рождения";					
" день рождения через "& PluralFormCyr(daysToBirthday;"день/дня/дней"); 	
PluralFormCyr(daysToBirthday;"день/дня/дней")&" до дня рождения"   		

                            )		//end of choose
               ; "" ) 		 //end of if -- значит не скоро - возвращает пусто

       ];
          text
      )

/*
Формула сравнивает месяц текущей даты с месяцем даты рождения плюс минус 15 дней (в диапазоне 30 дней). Для этого к текущей дате прибавляется 15 дней и полученная дата сравнивается с датой дня рождения в текущем году. Если разница меньше или равна 15, то день рождения попадает в ближайшие 30 дней. Для отображения "дней до дня рождения " больше чем за 3 дня используется функция PluralFormCyr

*/

Ответить