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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 20:16   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Проверить входит ли текущая дата в диапазон дат?

Добрый вечер!
Мне нужно проверить, входил ли текущая дата в диапазон указанных дат? Загвоздка в том, что мне нужно в качестве года, подставлять текущий год. День и месяц в границах диапазона постоянны.
Вот, такое условие:
Код:
  DNow:=DateToStr(Now);
  D1:='01.01.' + DNow[7] + DNow[8] + DNow[9] + DNow[10];
  D2:='31.06.' + DNow[7] + DNow[8] + DNow[9] + DNow[10];

  if (Now >= StrToDateTime(D1)) and (Now <= StrToDateTime(D2)) then
  begin
   ShowMessage('Дата в диапозоне!');
  end;
Естественно, что это не работает, т.к. говорит, что: ''01.01.2012'' is not valid date and time.
Прошу помощи в правильном составлении условия!?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.11.2012, 20:25   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Ошибка сама тебе говорит, что дата не может быть временем.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 16.11.2012, 20:30   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
var Dnow:string;d1,d2:string;
begin
  DNow:=DateToStr(Now);

  D1:='01.01.' + DNow[7] + DNow[8] + DNow[9] + DNow[10];
  D2:='30.6.' + DNow[7] + DNow[8] + DNow[9] + DNow[10]; // в июне 30 дней как бе
  if (Now >= StrToDate(D1)) and (Now <= StrToDate(D2)) then
  begin
   ShowMessage('Дата в диапазоне!');
  end;
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 16.11.2012 в 20:44.
Mad_Cat вне форума Ответить с цитированием
Старый 16.11.2012, 20:40   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Черт, не сообразил проверить правильность указанных дней! Mad_Cat, спасибо за указание и помощь! А зачем указывать разделитель даты? У меня ведь перед условием в качестве разделителя даты указывается точка.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.11.2012, 20:43   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
зачем указывать разделитель даты
не хотите не надо
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 16.11.2012, 21:02   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Все проще...
Код:
IsDateBetween(aDate,aDateBefore,aDateAfter:string):Boolean;
var
  d1,d2,d3:TDate;
begin
  d1:=StrToDate(aDate);
  d2:=StrToDate(aDateBefore);
  d3:=StrToDate(aDateAfter);
  Result:=((CompareDateTime(d1,d2) = 1) and (CompareDateTime(d1,d3) = -1));
end;
Человек_Борща вне форума Ответить с цитированием
Старый 16.11.2012, 21:32   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А зачем куча стринговых функций? Не проще ли месяц и день начала и конца диапазона дат хранить в word например и проверять просто функцией
Код:
function InRange(MonBeg,DayBeg,MonEnd,DayEnd: Word): Boolean;
begin
  Result:=(EncodeDateTime(YearOf(Date),MonBeg,DayBeg)<=Date) and
          (EncodeDateTime(YearOf(Date),MonEnd,DayEnd)>=Date);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.11.2012 в 21:34.
Аватар вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текущая дата С++ Aikonai Помощь студентам 1 12.11.2010 17:16
Вычитание дат(дата-дата=кол.дней) zallza Общие вопросы Delphi 1 31.05.2010 22:50
Текущая дата Radser Общие вопросы C/C++ 2 25.01.2010 11:18
Текущая дата в Эдит Ermiss Общие вопросы Delphi 4 22.12.2007 00:08
Текущая дата Nasya Microsoft Office Excel 8 26.06.2007 10:33