![]() |
|
|
|
|
#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; |