![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужна помощь [D7, XP]
Прохожев Максим © (2007-02-16 10:18:00)Добрый день !!! Мне нужна помощь, я только изучаю дельфи, не могу решить самостоятельно. В общем есть функция которая подсчитывает количество дней между двумя датами, появилась необходимость откорректировать эту функцию так, что бы она брала по умолчанию 30 дней за месяц (любой месяц) Помогите исправить ее так. Заранее спасибо.
function DaysBetween(d1 : Integer;
m1 : Integer;
y1 : Integer;
d2 : Integer;
m2 : Integer;
y2 : Integer):Integer;forward;
function DaysBetween(d1 : Integer;
m1 : Integer;
y1 : Integer;
d2 : Integer;
m2 : Integer;
y2 : Integer):Integer;
var
n1 : Integer;
n2 : Integer;
begin
if m1>2 then
begin
m1 := m1+1;
end
else
begin
m1 := m1+13;
y1 := y1-1;
end;
n1 := 36525*y1 div 100+306*m1 div 10+d1;
if m2>2 then
begin
m2 := m2+1;
end
else
begin
m2 := m2+13;
y2 := y2-1;
end;
n2 := 36525*y2 div 100+306*m2 div 10+d2;
Result := n2-n1;
end;
iXT (2007-02-16 14:30:00) [1]А что за банк? :)
Непойму, как так можно проценты считать
Знавал я одну контору у которых (100 + 3%) + 5% = 108 :) Причем контора была не мелкая, да и сейчас живет :)
Desdechado (2007-02-16 12:52:00) [2]Я не пойду к вам брать кредит. Жулики какие-то...
Прохожев Максим (2007-02-16 12:42:00) [3]Проблема снята, всем спасибо.
2 fd979, отдельное большое спасибо !!!
Elen (2007-02-16 12:38:00) [4]
> Ато у меня ошибка выходит.
Какая?
Прохожев Максим (2007-02-16 12:36:00) [5]
> Function DAYS360(pDateFrom, pDateTo: TdateTime): Integer;
>
>
> Var
> d1, m1, Y1, d2, m2, y2 : Integer;
> dtTemp1: Double;
> begin
> d1 := dayof(pDateFrom);
> m1 := monthof(pDateFrom);
> Y1 := yearof(pDateFrom);
> d2 := dayof(pDateTo);
> m2 := monthof(pDateTo);
> y2 := yearof(pDateTo);
> dtTemp1 := pDateFrom + 1;
> If (dayof(dtTemp1) = 1) And (monthof(dtTemp1) = 3) Then
> d1 := 30;
> If (d2 = 31) And (d1 = 30) Then
> d2 := 30;
>
> Result := Trunc(Int(((y2 - Y1) * 360) + ((m2 - m1) * 30)
> + (d2 - d1)));
> End;
А в Uses что нибудь нужно подключать ??? Ато у меня ошибка выходит.
fd979 (2007-02-16 12:21:00) [6]Я проверил работает нормально - как ты указал:
> Прохожев Максим (16.02.07 11:12) [16]
> 28.01.2006 по 28.02.2006 = 30
> 28.01.2006 по 28.03.2006 = 60
> 28.01.2006 по 01.03.2006 = 33
fd979 (2007-02-16 12:17:00) [7]Попробуй так:
Function DAYS360(pDateFrom, pDateTo: TdateTime): Integer;
Var
d1, m1, Y1, d2, m2, y2 : Integer;
dtTemp1: Double;
begin
d1 := dayof(pDateFrom);
m1 := monthof(pDateFrom);
Y1 := yearof(pDateFrom);
d2 := dayof(pDateTo);
m2 := monthof(pDateTo);
y2 := yearof(pDateTo);
dtTemp1 := pDateFrom + 1;
If (dayof(dtTemp1) = 1) And (monthof(dtTemp1) = 3) Then
d1 := 30;
If (d2 = 31) And (d1 = 30) Then
d2 := 30;
Result := Trunc(Int(((y2 - Y1) * 360) + ((m2 - m1) * 30) + (d2 - d1)));
End;
Прохожев Максим (2007-02-16 12:15:00) [8]
> Код писать ломота. Суть:
> d1.m1.y1 d2.m2.y2
>
> кол-во полных (с 01 по 30-е) месяцев m12
> 01.(m1 + 1.y1) - 01.m2.y2
>
> дней в левом месяце n1
> 30 - d1 + 1
> дней в правом месяце n2
> d2
>
> dd = m12 * 30 + n1 + n2
Сейчас попробую..
Прохожев Максим (2007-02-16 12:12:00) [9]Мастера, помогите плиз. Мне больше ненакого надеяться. :-(
ЮЮ (2007-02-16 12:08:00) [10]Код писать ломота. Суть:
d1.m1.y1 d2.m2.y2
кол-во полных (с 01 по 30-е) месяцев m12
01.(m1 + 1.y1) - 01.m2.y2
дней в левом месяце n1
30 - d1 + 1
дней в правом месяце n2
d2
dd = m12 * 30 + n1 + n2
Прохожев Максим (2007-02-16 11:50:00) [11]Date1:= StrToDate('01.01.2006');
Date2:= StrToDate('01.05.2006');
i:=MonthsBetween(Date2, Date1) * 30 + DaysBetween(StartOfTheMonth(Date2),Date2)- DaysBetween(Date1, EndOfTheMonth(Date1));
Результат: 60 дней как 2 месяца берет.
Плохиш (2007-02-16 11:38:00) [12]
> Прохожев Максим (16.02.07 11:36) [22]
Второй плюс замени на минус.
Прохожев Максим (2007-02-16 11:36:00) [13]MonthsBetween(Date2, Date1) * 30 + DaysBetween(StartOfTheMonth(Date2),Date2)+ DaysBetween(Date1, EndOfTheMonth(Date1));
Совсем не правильно считает :(
Плохиш (2007-02-16 11:33:00) [14]Date1, Date2: TDatetime;
PS. в [18] надо поставить минус вместо плюса.
Прохожев Максим (2007-02-16 11:32:00) [15]АААА все понял. Сейчас проверю)))С ошибкой разобрался.
Прохожев Максим (2007-02-16 11:28:00) [16]Result := MonthsBetween(Date2, Date1) * 30 + DaysBetween(StartOfTheMonth(Date2), Date2);
Что то не компилится, Statment expected, but expression of type integer found :(
Плохиш (2007-02-16 11:18:00) [17]
> Плохиш © (16.02.07 11:14) [17]
Хотя надо ещё добавить+ DaysBetween(Date1, EndOfTheMonth(Date1)):-))
Плохиш (2007-02-16 11:14:00) [18]
Result := MonthsBetween(Date2, Date1) * 30 + DaysBetween(StartOfTheMonth(Date2), Date2);
Что-то типа этого :-)
Прохожев Максим (2007-02-16 11:12:00) [19]28.01.2006 по 28.02.2006 = 30
28.01.2006 по 28.03.2006 = 60
28.01.2006 по 01.03.2006 = 33
Johnmen (2007-02-16 11:03:00) [20]>Прохожев Максим (16.02.07 10:58) [13]
28.01.2006 по 28.02.2006 = ?
28.01.2006 по 28.03.2006 = ?
28.01.2006 по 01.03.2006 = ?
Сколько здесь?