![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Нужно сделать программу, которая определит разницу между двумя датами, введенными в два однострочных редактора, в формате дд.мм.гггг. Как такое сделать, ума не приложу. Прошу помочь. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Поднималась тут такая тема. Ищи. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Это? 
		
	
		
		
		
		
		
		
			Сделал все как тут, не работает. Он пишет, сколько дней, сколько месяцев, и сколько лет между этими датами. Мне же нужен ответ в формате дд.мм.гг. И еще, почему не работает такой вариант: Код: 
	procedure TForm1.Button1Click(Sender: TObject); var p,v,rez:TDate; begin p:=strtodate(Edit1.Text); v:=strtodate(Edit2.Text); rez:=p-v; Label1.Caption:=datetostr(rez); end; Последний раз редактировалось Diplomate, 10.12.2012 в 22:07.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Как именно он не работает? ошибка при компиляции, во время работы? Неправильный результат? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	И вообще, TDatePicker (или TMaskEdit) использовать не удобнее?  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Выдает неправильный результат. Между 2012 и, скажем, 2010 годом пишет разницу 1912 лет.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Правильно пишет. Тут есть особенность, что у типа TDateTime значение 0 соответсвует 1 января 1900 года (если не ошибаюсь). В принципе, можно либо посчитать грубо (в году 365 дней, в месяце 30 деней), либо извращаиться с DaysBetween, MonthsBetween (года - по последней). 
		
	
		
		
		
		
		
	
		
		
	
	
	Первый вариант выглядит так: Код: 
	procedure TForm1.Button1Click(Sender: TObject);
var 
  p,v,rez:TDate;
  ds : integer;
  y, m, d : integer;
begin
  p:=strtodate(Edit1.Text);
  v:=strtodate(Edit2.Text);
  rez:=p-v;
  ds := trunc(rez);
  y := ds div 365;
  m := (ds mod 365) div 30;
  d :=  (ds mod 365) mod 30;
  Label1.Caption:=format('%d.%d.%d',[d,m,y]);
end; |