Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.05.2013, 17:52
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию Прибавить к дате год и вычесть 1 день

Добрый день.
Код:
procedure Tf_Inform.JvDBDateEdit1Exit(Sender: TObject);
var
  Day, Moth, Year: Word;
  myDate : TDateTime;
begin
  DecodeDate(JvDBDateEdit1.Date, Year, Moth, Day);
  Year := Year + 1;
  Day := Day - 1;
  myDate := EncodeDate(Year, Moth, Day);
  JvDBDateEdit2.Date := myDate;
end;
Код работает когда число в JvDBDateEdit1.Date не равно 1, если же 1, то ошибка, поправьте пожалуйста код, чтобы он выдавал дату равную: JvDBDateEdit1.Date + 1 год - 1 день, т.е. сегодня 01.05.2013 нужно 30.04.2014. Спасибо.

p.s. если так
Код:
procedure Tf_Inform.JvDBDateEdit1Exit(Sender: TObject);
var
  myDate : TDateTime;
begin
  myDate := JvDBDateEdit1.Date;
  myDate := myDate + 364;
  JvDBDateEdit2.Date := myDate;
end;
то получается - 2 дня.

Последний раз редактировалось DOR, 01.05.2013 в 18:04.
Ответить с цитированием
  #2  
Старый 02.05.2013, 08:42
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Странно, у меня все работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  myDate : TDate;
begin
myDate:=Now;
myDate:=myDate + 364;
ShowMessage(DateToStr(myDate));
end;
Переменную myDate надо объявлять не как TDateTime, а как TDate либо же использовать:
Код:
myDate:=Trunc(myDate) + 364;
__________________
Все смелые до begin...

Последний раз редактировалось DrGeorg, 02.05.2013 в 09:06.
Ответить с цитированием
  #3  
Старый 02.05.2013, 10:26
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Ваш пример не учитывает високосные года.

Извратился так, для моей задачи сгодится
Код:
procedure Tf_Inform.JvDBDateEdit1Exit(Sender: TObject);
var
  Year, Moth, Day: Word;
  myDate : TDate;
begin
  DecodeDate(JvDBDateEdit1.Date, Year, Moth, Day);
  myDate := JvDBDateEdit1.Date;
  if (Year = 2008) or (Year = 2012) or (Year = 2016) or (Year = 2020) then
    begin
      if Moth <= 2 then
        begin
          myDate := myDate + 365;
          JvDBDateEdit2.Date := myDate;
        end
      else
        begin
          myDate := myDate + 364;
          JvDBDateEdit2.Date := myDate;
        end;
    end
  else
    begin
      myDate := myDate + 364;
      JvDBDateEdit2.Date := myDate;
    end;
end;
Ответить с цитированием
  #4  
Старый 02.05.2013, 13:07
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Чего творите, всё намного проще

Код:
uses 
DateUtils;
...

var
  myDate : TDateTime;
begin

// прибавить к myDate один год
myDate := IncYear(myDate);

// прибавить пять лет, итд.
myDate := IncYear(myDate, 5);

// вычесть пять лет
myDate := IncYear(myDate, -5);

end;


З.Ы. Упс, про один день сразу не заметил, но это тоже не сложно

Код:
// прибавить день
myDate := IncDay(myDate);
// убавить на один день
myDate := IncDay(myDate, -1);

Последний раз редактировалось Alegun, 02.05.2013 в 13:27.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
DOR (05.05.2013)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter