Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите алгоритм как вычислить количество дней между датами


Страницы:   1 2

pinokio ©   (2004-12-16 15:47:00) 

Добрый день..
Подскажите алгоритм как вычислить количество дней между двумя датами....

мне нужен именно алгоритм.


Reindeer Moss Eater   (2004-12-16 19:34:00) [1]

Разница в днях:=TO_DATE(строка1) - TO_DATE('строка2');


jack128   (2004-12-16 18:51:00) [2]

ЯХДР. Правельный ник выбрал, парень.


Плохиш   (2004-12-16 18:43:00) [3]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1102690000&n=3

;-)


Алхимик   (2004-12-16 18:32:00) [4]


> [24] Суслик ©   (16.12.04 18:29)


Гы.


Алхимик   (2004-12-16 18:32:00) [5]


> :)))))))

Ну что ты ржёшь?
Сена хошь?


Суслик   (2004-12-16 18:29:00) [6]


> :)))))))

шо ты ржешь.
если оракле, то и смотри в его хелпе


Verg   (2004-12-16 18:29:00) [7]

Выцепляешь из строки день, месяц и год (парсингом! Как делается парсинг надо объяснять?) преобразуешь их в целые без знака и подставляешь в соответствующие параметры EncodeDate.

На всякий случай даю исходники EncodeDate:

type
 PDayTable = ^TDayTable;
 TDayTable = array[1..12] of Word;

const
 MonthDays: array [Boolean] of TDayTable =
   ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
    (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

 DateDelta = 693594;

function IsLeapYear(Year: Word): Boolean;
begin
 Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean;
var
 I: Integer;
 DayTable: PDayTable;
begin
 Result := False;
 DayTable := @MonthDays[IsLeapYear(Year)];
 if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) and
   (Day >= 1) and (Day <= DayTable^[Month]) then
 begin
   for I := 1 to Month - 1 do Inc(Day, DayTable^[I]);
   I := Year - 1;
   Date := I * 365 + I div 4 - I div 100 + I div 400 + Day - DateDelta;
   Result := True;
 end;
end;


pinokio   (2004-12-16 18:27:00) [8]

да нет у меня Delphi
Doudle = 24.10.2004
Поясняю к примеру 24.10.2004 в Oracle явно не в таком формате храниться

:)))))))


Алхимик   (2004-12-16 18:18:00) [9]


> у меня нет формата TDateTime

TDateTime = Double


Папа Карло   (2004-12-16 18:18:00) [10]

Буратино.
Не тормози.
Не надо ничего нигде брать. Набери TDateTime. Нажми f1. Почитай хелп. Если тебя удовлетворит такой подход (где 1 = 1 день), то используй его.


pinokio   (2004-12-16 18:15:00) [11]

:))))
у меня нет формата TDateTime
его надо где-то взять :)

Блин ладно сам уже придумал как сделать....


Verg   (2004-12-16 18:12:00) [12]


> вот я и спрашиваю алгоритм  (мне все надо сделать руками)....


Алгоритм преобразования даты в текстовом представлении в TDateTime? Это что ли?


Verg   (2004-12-16 18:09:00) [13]

function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
begin
 if ANow < AThen then
   Result := AThen - ANow
 else
   Result := ANow - AThen;

end;

function DaySpan(const ANow, AThen: TDateTime): Double;
begin
 Result := SpanOfNowAndThen(ANow, AThen);
end;

function DaysBetween(const ANow, AThen: TDateTime): Integer;
begin
 Result := Trunc(DaySpan(ANow, AThen));
end;


pinokio   (2004-12-16 18:06:00) [14]

for Reindeer Moss Eater lol :)

ты формат дат видел если тебе не трудно отними из одной другую и получи разницу в 2 дня..
еще раз как ты предлогаешь делаю обстрактно:
result:= '24.10.2004' - '22.10.2004'

явно требуеться преобразование или ты не согласен?

вот я и спрашиваю алгоритм  (мне все надо сделать руками)....


Reindeer Moss Eater   (2004-12-16 17:58:00) [15]

Разница дат в любом языке - это и есть количество дней.
Это и есть алгоритм.
Вычесть из большего меньшее.


pinokio   (2004-12-16 17:55:00) [16]

Кто нибуть алгоритм может подсказать как к примеру работает функция
betweenday() или betweenmonth вроде так давно Delphi не использую и
под рукой его у меня тоже нет чтобы исходники функций посмотреть..


Reindeer Moss Eater   (2004-12-16 17:52:00) [17]

И в слове "предлагать" нет букв "О"


Александр Иванов   (2004-12-16 17:51:00) [18]

А на чем программа?
Во многих средах допустимо что-то вида [1].


Reindeer Moss Eater   (2004-12-16 17:51:00) [19]

Программа не на Delphi поэтому не стоит предлогать мне функции из Delphi я их и сам знаю...
Разница между датамив любом языке - это количество дней.


Reindeer Moss Eater   (2004-12-16 17:49:00) [20]

>Reindeer Moss Eater

result := '24.10.2004' -22.10.2004

и что получиться :)


Буратино, у тебя в вопросе датыфигурируют, а не строки


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо