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
Stef MerlijnDeveloperAsked:
Who is Participating?
 
ThommyConnect With a Mentor Commented:
These are your required functions...
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;

Open in new window

0
 
WalkaboutTiggerCommented:
Hint 1:  http://delphi.about.com/od/beginners/l/blrtldatetime.htm
Hint 2:  http://delphi.about.com/library/rtl/blrtlDecodeDate.htm:

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
 
Stef MerlijnDeveloperAuthor Commented:
Exactly what I needed. Thank you.
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
JaccoCommented:
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
 
JaccoCommented:
lol, too slow :-)
0
 
Stef MerlijnDeveloperAuthor Commented:
But thanks anyway, Jacco.
0
 
ThommyCommented:
Thank you for the points...
:o)))
0
 
Stef MerlijnDeveloperAuthor Commented:
Thank you for thanking me :-)
0
All Courses

From novice to tech pro — start learning today.