Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с датами 
V
    Опции темы
Serebrus
Дата 17.11.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Привет друзья.

Даны несколько даты, например д1,д2,д3 (в формате дд.мм.гггг) и сравнительная дата СД (дд.мм.гггг).
Вопрос:
Как можно определить наиблизкую дату из д1,д2,д3 к СД?

Спосибо всем за ответ.  smile 



PM MAIL   Вверх
Lexicss
Дата 17.11.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Очень кратко. Для частного случая когда есть 3 даты:

Код

var fullDateSD, r1,r2,r3: TDateTime
...
fullDateSD := EncodeDate(yySD,mmSD,ddSD);

 r1 := Abs(fullDateSD - EncodeDate(yy1,mm1,dd1));
 r2 := Abs(fullDateSD - EncodeDate(yy2,mm2,dd2));
 r3 := Abs(fullDateSD - EncodeDate(yy3,mm3,dd3));

Наименьшее значение из переменных rX и есть соответсвующая ей дата X приближённая к СД.

Если тебе надо всё же код  подробней для общего случая - могу написать...

--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
Lexicss
Дата 17.11.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Короче, держи. Здесь алгоритм более общий. Мож поюзать.
Код

procedure TForm1.FormCreate(Sender: TObject);
type
  TMyDate = record
    day: Word;
    Month: Word;
    Year: Word;
  end;
var
  arecDate: array of TMyDate;
  curDate: TMyDate;
  i,j,N: Integer;
  compare: TDateTime;
begin
// curDate - анализируемая дата
// N - число дат для сравнения
 SetLength(arecDate,sizeOf(TMyDate)*N);

 //....  здесь необходимо заполнить массив arecDate датами

 curDate := EncodeDate(curDate.Year,curDate.Month,curDate.day);
 j:=-1;
 // Любое значение можно присвить compare, только как модно большое, например Now
 compare := Now;
 for i:= 0 to N-1
 do begin
   if  Abs(curDate - EncodeDate(arecDate[i].Year,arecDate[i].Month,arecDate[i].day)) < compare
   then begin
     compare := Abs(curDate - EncodeDate(arecDate[i].Year,arecDate[i].Month,arecDate[i].day));
     j := i;
   end;
 end;

 // по выходу из цикла, j - будет содержать индекс максимально приближённой даты( а compare - разницу в сутках к этой дате)

end;

--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
VICTAR
Дата 17.11.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Код

uses DateUtils;
...
DaysBetween(Date1, Date2); //кол-во дней между двумя датами

PM MAIL   Вверх
Serebrus
Дата 25.11.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Как говорят: "Одна голова хороша, а двое лудше". Спосибо др. друзья, вы помогли мне. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.