Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проверить дату


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

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

Автор: Демо 24.1.2010, 18:20
Цитата(Михалыч @  24.1.2010,  18:05 Найти цитируемый пост)
Еще хотел сделать через DecodeDate , но так можно проверить только год,


Код

procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);


var Year, Month, Day: Word

Добавлено через 2 минуты
+ CompareDate
+ FormatDateTime('yyyymmdd',...)  с последующим сравнением строк

Автор: Данкинг 24.1.2010, 18:24
Если я правильно понял, то как-то так:
Код

procedure TForm1.FormCreate(Sender: TObject);
var d1:tdatetime;
begin
d1:=strtodate('21.01.2010');
if d1<date() then showmessage('Ошибка!');
end;

Автор: amsoft 24.1.2010, 18:47
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
if EncodeDate(SpinEdit1.Value,SpinEdit2.Value,SpinEdit3.Value) < Date
then ShowMessage('Ошибка');
end;

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

Добавлено через 14 минут и 17 секунд
Не успел договорить,уже тему в другое место скинули smile 

Автор: amsoft 24.1.2010, 19:05
Михалыч, чем не устраивает мой вариант

Автор: Михалыч 24.1.2010, 19:43
Вы просто сравниваете введенную дату с настоящей,если сегодняшняя дата больше введенной ,то ошибка.
А если сегодня 24.01.2010 а я введу  01.02.2010 то ваш код посчитает это как прошедшее

Автор: Михалыч 24.1.2010, 20:06
Всем спасибо,вопрос решен!
Если кому надо то путем  function FormatDateTime
Спасибо Демо за правильное направление

Автор: Данкинг 24.1.2010, 20:06
Цитата(Михалыч @  24.1.2010,  19:43 Найти цитируемый пост)
А если сегодня 24.01.2010 а я введу  01.02.2010 то ваш код посчитает это как прошедшее

Почему это?

Автор: kami 24.1.2010, 21:15
Цитата(Михалыч @  24.1.2010,  19:43 Найти цитируемый пост)
ваш код посчитает это как прошедшее

Глупости, уж извините за откровенность.
Лучший код для решения этой задачи привел amsoft. Михалыч - прежде чем говорить "неправильно", неплохо было бы проверить.

Автор: xfoby 27.1.2010, 08:58
А ещё неплохо иногда использовать не SpinEdit'ы, а DateTimePicker, как положено...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)