Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизВнимание, розыск! IncDay Найти похожие ветки
← →
AlexKniga © (2005-05-18 11:57) [0]Ищется шедевр програмизькой мысли функция IncDay. Она раньше лежала в кладовке. Счас нигде не найти. У кого сохранилась, выложите, сиё должно остаться в анналах.
А вспомнилась оня в связи с веткой про StringToPChar
http://delphimaster.net/view/14-1116315976/
← →
Ega23 © (2005-05-18 11:58) [1]
function TfmMain.IncDay(const DateTime: TDateTime; NumberOfDays: Integer): TDateTime;
{Функция предназначена для изменения даты (DateTime) путем добавления количества дней (NumberOfDays). Значение NumberOfDays может быть отрицательным.}
var
Y, M, D, CountDays: Word;
N: Integer;
Sign, NoBreak: Boolean;
begin
Sign := NumberOfDays >= 0;
DecodeDate(DateTime, Y, M, D);
N := NumberOfDays;
NoBreak := True;
if Sign then //Прибавить
begin
while(NoBreak) do
begin //Количество дней в месяце
CountDays := MonthDays[IsLeapYear(Y), M];
if (N + D) <= CountDays then //Если в пределах данного месяца
begin
Inc(D, N);
NoBreak := False;
end
else
begin
if M < 12 then
Inc(M, 1)
else
begin
M := 1;
Inc(Y, 1);
end;
N := N - (CountDays - D);
D := 0;
end;
end;
end
else //Отнять
begin
N := -N;
while(NoBreak) do
begin
if D > N then //Если в пределах данного месяца
begin
Dec(D, N);
NoBreak := False;
end
else
begin
if M > 1 then
Dec(M, 1)
else
begin
M := 12;
Dec(Y, 1);
end;
//Количество дней в месяце
CountDays := MonthDays[IsLeapYear(Y), M];
N := N - D;
D := CountDays;
end;
end;
end;
Result := EncodeDate(Y, M, D);
//Установить время из старой даты
ReplaceTime(Result, DateTime);
end;
← →
Ega23 © (2005-05-18 11:59) [2]Моя любимая функция. Уже года 3 на стенке висит :о)
← →
Kerk © (2005-05-18 12:02) [3]ГЕНИАЛЬНО!!! БРАВО!! НЕ УСТАЮ ВОСХИЩАТЬСЯ!! :))
← →
TUser © (2005-05-18 12:04) [4]А автор у этого произведения есть?
← →
Ega23 © (2005-05-18 12:04) [5]Кстати, там вроде кгде-то ашипка была. Кто-то на работе говорил, что ашипку углядел. Искать лень.
← →
Ega23 © (2005-05-18 12:06) [6]Удалено модератором
Примечание: AutoModerator
← →
P.N.P. © (2005-05-18 12:11) [7]По-моему здесь ашипка, на первый взгляд
...
N := N - (CountDays - D);
D := 0;
...
← →
Sha © (2005-05-18 12:47) [8]> Ega23 © (18.05.05 11:59) [2]
У меня тоже висела, пока не украли :)
> P.N.P. © (18.05.05 12:11) [7]
Вроде нет тут никакой ошибки.
← →
P.N.P. © (2005-05-18 12:59) [9]А, точно, не заметил, что там в цикле Inc(D, N);
← →
AlexKniga © (2005-05-18 13:03) [10]Ega23 © (18.05.05 11:58) [1]
Большое спасибо!
TUser © (18.05.05 12:04) [4]
А автор у этого произведения есть?
В кладовке написано dmi, по-моему, это старый ник Дмитрий О..
← →
Palladin © (2005-05-18 13:42) [11]Во блин... Тоже распечатаю...
← →
nikkie © (2005-05-18 14:19) [12]>В кладовке написано dmi, по-моему, это старый ник Дмитрий О.
если я правильно помню, то, судя по исходникам автошемы, дима не отличается любовью к форматированию кода. :)
← →
Digitman © (2005-05-18 14:31) [13]
> AlexKniga © (18.05.05 13:03) [10]
Result := DateTime + NumberOfDays;
← →
Bronco © (2005-05-18 14:33) [14]
> Digitman © (18.05.05 14:31) [13]
Такое позорно даже на стенку вешать :-)))
← →
Ega23 © (2005-05-18 14:36) [15]2 Digitman © (18.05.05 14:31) [13]
Result := DateTime + NumberOfDays;
непрекольно :о)
← →
Digitman © (2005-05-18 14:37) [16]
> Bronco © (18.05.05 14:33) [14]
> Такое позорно даже на стенку вешать
угу)
кнопка закроет собой весь текст)
да и в кладовку не менее позорно такое кидать - мало там хлама, так еще одной хренью больше станет)
← →
GrayHairs © (2005-05-18 15:23) [17]пример использования
function DaysInPeriod(DateTime1,
DateTime2: TDateTime): integer;
var i:integer;
CurrentDate, LastDate:TDateTime;
begin
i:=1;
if DateTime1 < DateTime2
then
begin
CurrentDate:=DateTime1;
LastDate:=DateTime2;
end
else
begin
CurrentDate:=DateTime2;
LastDate:=DateTime1;
end;
CurrentDate:=DateTime1;
While CurrentDate < LastDate do begin
CurrentDate:=IncDay(CurrentDate, i);
inc(i);
end;
Result:=i;
end;
← →
P.N.P. © (2005-05-18 15:25) [18]>GrayHairs © (18.05.05 15:23) [17]
Что это было?
← →
Sha © (2005-05-18 15:35) [19]Есть в этой функции девственная нетронутая красота...
Она чарует как пробуждение природы,
неуловима как легкое дуновение ветерка...
Шедевр невозможно сравнить со стандартом, шаблоном.
Ручной работе великого мастера чуждо ремесло.
← →
GrayHairs © (2005-05-18 15:36) [20]Пример. Использование IncDay для вычисления дней в периоде, заданном двумя датами. С ошибкой в 18 строке.
← →
P.N.P. © (2005-05-18 15:40) [21]> GrayHairs © (18.05.05 15:36) [20]
Функция DaysBetween() ни о чем не говорит ? :))))
← →
Danilka © (2005-05-18 15:42) [22][17] GrayHairs © (18.05.05 15:23)
Хм. Как-то странно вы ее используете, еёж на стену вешают..
← →
Bronco © (2005-05-18 15:46) [23]
> P.N.P. © (18.05.05 15:40) [21]
> Функция DaysBetween() ни о чем не говорит ? :))))
Это юмор такой.
Панов давеча начал шутить, а народ никак не остановится.
← →
GrayHairs © (2005-05-18 15:49) [24]DaysBetween? Так что IncDay вообще не пользовать? Пусть две будут.
← →
P.N.P. © (2005-05-18 15:51) [25]Да, что-то у меня не то творится с чуством юмора к концу раб. дня :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.014 c