- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
&НаКлиенте
Процедура Расчитать(Команда)
	ТекДата = ТекущаяДата();
	ТекМесяц = Месяц(ТекДата);
	МесяцРождения = Месяц(ДатаРождения);
	
	Если ТекМесяц=МесяцРождения Тогда       //День рождения сегодня или в этом месяце,
	    Если День(ТекДата)=День(ДатаРождения) Тогда
		
			КоличествоДнейДоДР = 0;
		ИначеЕсли День(ТекДата)<День(ДатаРождения)  Тогда 
			КоличествоДнейДоДР = День(ДатаРождения)-День(ТекДата);
		Иначе
			
			
		  КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
		 Дата = ДобавитьМесяц(ТекДата,1);
		 Ограничитель = (12-ТекМесяц)+МесяцРождения;
		 Для сч=1 По Ограничитель Цикл
			Если сч=Ограничитель Тогда			
			    КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
			    продолжить;			
			КонецЕсли; 
			КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
			 Дата = ДобавитьМесяц(Дата,1);
		 	
		 
		 КонецЦикла; 
		
		КонецЕсли; 
		
	
	ИначеЕсли ТекМесяц<МесяцРождения Тогда   //День рождения еще не наступил,
		 КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
		 Дата = ДобавитьМесяц(ТекДата,1);
		 Для сч= ТекМесяц+1 По МесяцРождения Цикл
			
                        Если сч=МесяцРождения Тогда
			   КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
			   продолжить;
			КонецЕсли; 
			КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
			 Дата = ДобавитьМесяц(Дата,1);
		 	
		 
		 КонецЦикла; 
		
		
	ИначеЕсли ТекМесяц>МесяцРождения Тогда     //День рождения уже прошел.	
		     КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
		 Дата = ДобавитьМесяц(ТекДата,1);
		 Ограничитель = (12-ТекМесяц)+МесяцРождения;
		 Для сч= 1 По Ограничитель Цикл
			Если сч=Ограничитель Тогда
			  КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
			  продолжить;
			КонецЕсли;
 
			КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
			 Дата = ДобавитьМесяц(Дата,1);
		 	
		 
		 КонецЦикла; 
	
	 КонецЕсли; 
	 
	 Сообщение = Новый СообщениеПользователю;
	 Сообщение.Текст = КоличествоДнейДоДР;
	 Сообщение.Сообщить(); 
		
	// Вставить содержимое обработчика.
КонецПроцедуры
                                 
        
            Задача рассчитать количество дней до дня рождения, вопрос в том что не много ли я использовал  условий Если?
        
        
То ли дело "Python":
СекундыДень = 86400; // 60*60*24
ТекДата = КонецДня(ТекущаяДата());
ДеньРождения = Дата(Год(ТекДата), Месяц(ДатаРождения), День(ДатаРождения));
Если ДеньРождения < ТекДата Тогда
ДеньРождения = Дата(Год(ТекДата)+1, МесяцДР, ДеньДР);
КонецЕсли;
ЧислоДней = Окр((ДеньРождения - ТекДата)/СекундыДень);
Оптимизация!
https://github.com/python/cpython/blob/master/Lib/datetime.py
Вот поэтому я за 1С. Вот бы в "PHP" можно было так же: