# Function to get previous, current and next quarter based on date

Hi,

I need three functions to get previous, current and next quarter based on a date.
Date: 31-12-2010

Function DecQuarter(MyDate : TDateTime) : Integer;
Previous = 3

Function Quarter(MyDate : TDateTime) : Integer;
Current = 4

Function IncQuarter(MyDate : TDateTime) : Integer;
Next = 1
###### Who is Participating?

Commented:
``````function Quarter(MyDate:TDateTime):integer;
var
Year, Month, Day, Hour: Word;
begin
DecodeDate(MyDate, Year, Month, Day);
result:=((Month-1) div 3) +1;
end;

function DecQuarter(MyDate:TDateTime):integer;
begin
result:=Quarter(MyDate)-1;
if result=0 then result:=4;
end;

function IncQuarter(MyDate:TDateTime):integer;
begin
result:=Quarter(MyDate)+1;
if result=5 then result:=1;
end;
``````
0

Commented:

There are only 4 possible answers for each function:  1, 2, 3 or 4.
Once you know the month, if the month of the date passed to the function is 1, 2 or 3, the quarter of the date is 1; 4, 5 or 6, the quarter is 2; 7, 8 or 9, the quarter is 3 and finally 10, 11 or 12 the quarter is 4.
If you take the current month, add 2 and then divide the result by 3, and discard the fraction, you get the number of the quarter. TRUNC((Month + 2) / 3) = CurrentQuarter
(1+2)/3 = 1
(2+2)/3 = 1.33333 (TRUNCating it discards the .33333)
(3+2)/3 = 1.66666 (TRUNCating it discards the .66666)

For the Previous quarter function, you have to subtract 1 from the resulting number and, if the result of this subtraction is 0, the previous quarter is 4.

For the  Next quarter function, you have to add 1 to the resulting number and, if the result is 5, the next quarter is 1.

I hope that helps.
0

DeveloperAuthor Commented:
Exactly what I needed. Thank you.
0

Commented:
function Quarter(MyDate: TDateTime): Integer;
var  Y, M, D: Word;
begin
DecodeDate(MyDate, Y, M, D);
Result := ((M-1) div 3) + 1;
end;

function IncQuarter(MyDate: TDateTime): Integer;
var q: Integer;
begin
Result := Quater(MyDate) + 1;
if Result > 4 then
Result := 1;
end;

function DecQuarter(MyDate: TDateTime): Integer;
var q: Integer;
begin
Result := Quater(MyDate) - 1;
if Result < 1 then
Result := 4;
end;
0

Commented:
lol, too slow :-)
0

DeveloperAuthor Commented:
But thanks anyway, Jacco.
0

Commented:
Thank you for the points...
:o)))
0

DeveloperAuthor Commented:
Thank you for thanking me :-)
0