
نوشته شده توسط
حسین خانی
با سلام خدمت آقای خرسندی
امروز بر حسب نیاز برای استفاده از پارامتر عددی تابع IncDay این کامپوننت، به مشکل مشابه تابع DecDay این دوستمون (که خودشون رفع کردن) برخوردم!!!
کد تابع مربوطه رو دستکاری کردم ولی خروجی درستی نداد.
ممنون میشم این مشکل اصلاح بشه.
شما یذره نبوغ به خرج بدهید انقدر نیاز نخواهید داشت تا سازنده که انگار هم خیلی سرشون شلوغه ، مشکلات رو رفع کنند.
من الآن از این کامپوننت تو چندتا برنامه هام استفاده کردم و چندتا مشکلاش رو خودم حل کردم
این کد DecDay که من باهاش مشکلی ندارم و البته این رو هم بگم که کد رو عجله ای نوشتم.
function DecDay(ADate: string; DateKind: TDateKind; ANumberOfDay: integer = 1): string;
var
Year, Month, Day: Word;
Y, M, D: string;
TempDay: Integer;
begin
if (ANumberOfDay > 30) then
Exit(ADate);
SeparateYMD(ADate, Year, Month, Day);
if (Day - ANumberOfDay >= 1) then
Dec(Day, ANumberOfDay)
else
begin
if Month > 1 then
begin
{Update Code}
TempDay:= Day {Insert};
Dec(Month);
Day := DaysOfMonths[DateKind, Month];
{Dec Day Now Return True Day}
Dec(Day, Abs(TempDay - ANumberOfDay));{Insert}
if ((Day > 32 {Condions}) or (Day = 0)) then
begin
Dec(Month);
Day := DaysOfMonths[DateKind, Month];
TempDay:= Abs(ANumberOfDay - Day) ;
Dec(ANumberOfDay, TempDay);
Day:= ANumberOfDay;
end;
end
else
begin
{Insert Code at : 1391/01/02 14:25}
if (Day <= ANumberOfDay) and (Month = 1) then {e.g : 1391/01/01}
begin
ADate:= DecMonth(ADate, DateKind);
Day:= ((DaysOfMonths[DateKind, 12]) - ANumberOfDay) + Day;
if ((Day > 32 {Condions}) or (Day = 0)) then
begin
Day := DaysOfMonths[DateKind, 12];
TempDay:= Abs(ANumberOfDay - Day);
Dec(ANumberOfDay, TempDay);
Day:= ANumberOfDay;
end;
end
else
Day:= Day - ANumberOfDay;
SeparateParts(ADate, Y, M, D);
Exit(ConcatenateDate(StrToInt(M), StrToInt(Y), StrToInt(M), Day));
{End of Insert}
end;
end;
Result:= ConcatenateDate(Month, Year, Month, Day);
end;