Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2010, 18:04   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию Проверка даты

Подскажите,нужно при нажатии на кнопку проверять введенную дату и сравнивать с настоящей,если меньше,то ошибка.
Но тут не все так просто,у меня на форме три Spinedit, в первый ввожу
год,во второй месяц и в третий число.Далее нужно проверить с сегоднешним.Делаю так: трем переменным присваиваю sSpinEdit4.Value,
далее перевожу в строку, делаю еще одну переменную и ей присваиваю
вот такой формат: 24.01.2010
А вот как по условию проверить все это?

Еще хотел сделать через DecodeDate , но так можно проверить только год,
если он меньше чем сегодня,то ошибка. А как проверять месяц и число?

Извеняюсь за неполную информацию(уже крыша едет) , дело в том что набирать нужно обязательно во всех трех Spinedit,
но набирать можно не только сегоднешнюю дату а и каторая будет через месяц , например 07.02.2010 .
Вот в чем вопрос,как определить что дата 07.02.2010 ,больше чем 24.01.2010
Если сравнивать только месяца: 02 больше чем 01 , то как быть с годом,
вообщем ни как условие проверки не придумаю
За частые поиски был забанен во всех известных
поисковых системах!

Последний раз редактировалось Михаил Юрьевич; 24.01.2010 в 18:51. Причина: дополнение
Михаил Юрьевич вне форума Ответить с цитированием
Старый 24.01.2010, 19:07   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Перевести строку в дату (StrToDate(str)) и просто сравнить:
if DT < Date then <ошибка>
Тип TDateTime во внутреннем представлении просто число (чем больше число, тем более поздняя дата), а числа использовать в условиях сравнения не возбраняется.
Скандербег вне форума Ответить с цитированием
Старый 24.01.2010, 19:23   #3
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

НУ сравнить равность сегодняшней и введенной не тяжело
Код:
Var
d:string;
begin
d:=SpinEdit1.Text{День}+'.'+SpinEdit2.Text{месяц}+'.'+SpinEdit3.Text{год}
if d=DatetoSTR(Now) then
 //Нужный код
end;
А вот на счет сравнения, я бы сделал последовательное сравнение, что то вроде этого:
Код:
if God.Value=>God1.Value then
 begin
  if God.Value>God1.Value then
   begin
    // первая дата больше
    exit;
   end
  else
   begin
    if Mesac.Value=>Mesac.Value then
     begin
      if Mesac.Value>Mesac.Value then
       begin
        // первая дата больше
        exit;
       end
      else
       begin
        If den.Value=>Den1.Value
         begin
          if den.Value>Den1.Value then
           begin
            // первая дата больше
            exit;
           end
          else
           begin
            //даты равны
            Exit;
           end;
        end
       else
        begin
         //вторая дата больше  из-за дня
         Exit;
        end
       end
     end
    else
     begin
      //вторая дата больше из-за месяца
      Exit;
     end;
   end
 end
else
 begin
  //вторая дата больше из-за года
 end
Ну как то так, мож где напутал
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 24.01.2010, 19:27   #4
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

А еще можно так сравнить слить дату, то есть сделать ее без точек, как то так (ситация со спин эдитами):
Код:
d1:=strtoint(Inttostr(God1.Value)+Inttostr(Mesac1.Value)+Inttostr(Den1.Value));
d2:=strtoint(Inttostr(God2.Value)+Inttostr(Mesac2.Value)+Inttostr(Den2.Value));
if d1>d2 then
 //первая дата больше
else
 //вторая больше
Не сразу допер
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 24.01.2010, 19:33   #5
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Цитата:
Сообщение от Шульц Посмотреть сообщение
А еще можно так сравнить слить дату, то есть сделать ее без точек, как то так (ситация со спин эдитами):
Код:
d1:=strtoint(Inttostr(God1.Value)+Inttostr(Mesac1.Value)+Inttostr(Den1.Value));
d2:=strtoint(Inttostr(God2.Value)+Inttostr(Mesac2.Value)+Inttostr(Den2.Value));
if d1>d2 then
 //первая дата больше
else
 //вторая больше
Не сразу допер
А как сравнить если получится вот такая дата: сегодня 24.01.2010
а ввели : 31.06.2009 Где больше,где меньше 31062009 и 24012010
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 24.01.2010, 19:42   #6
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Во первых куда ввели? Продолждаю по спинам.
Код:
var
d1,d2:integer;
begin
d1:=strtoint(Inttostr(God1.Value)+Inttostr(Mesac1.Value)+Inttostr(Den1.Value));//это дата введенная в спины
d2:=strtoint(FormatDateTime('yyyy',Now)+FormatDateTime('mm',Now)+FormatDateTime('dd',Now));
if d1>d2 then
 //первая дата больше
else
 //вторая больше
end;
Вот мы и получим сравнения двух чисел 20090631 (введенная дата) и 20100124 (сегодняшняя дата)
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 24.01.2010, 20:03   #7
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Извеняюсь,сразу не заметил что Вы воспользовались FormatDateTime и перевернули дату ,спасибо!
+
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 24.01.2010, 20:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А вообще правильный ответ дан в пост #2 Скандербег


Шульц, ага. так тоже можно.
но зачем эти фокусы, когда даты банально можно сравнивать?!

Последний раз редактировалось Serge_Bliznykov; 24.01.2010 в 20:16.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2010, 20:20   #9
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Для большей ясности (может Михаил Юрьевич не обратил внимания):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var D : TDateTime;
begin
  D := EncodeDate(SpinEdit3.Value, SpinEdit2.Value, SpinEdit1.Value); //год, месяц, день
  if D < Date then 
    Label1.Caption := '<' 
  else 
    Label1.Caption := '>=';
end;
Скандербег вне форума Ответить с цитированием
Старый 24.01.2010, 20:25   #10
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Я просто предложил альтернативу А так, конечно Скандербег дал правильный ответ
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формат даты. agregator Microsoft Office Excel 3 21.01.2011 14:55
Проверка даты. Firebird artemavd БД в Delphi 10 18.10.2009 20:14
Даты Sparky БД в Delphi 6 02.10.2009 09:48
ограничение даты Alexi Компоненты Delphi 4 21.04.2009 13:09
Даты не даты Nasya Microsoft Office Excel 3 22.08.2007 20:18