Solved

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

Posted on 2011-03-01
8
1,790 Views
Last Modified: 2012-05-11
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
0
Comment
Question by:Delphiwizard
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 15

Expert Comment

by:WalkaboutTigger
ID: 35014856
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
 
LVL 19

Accepted Solution

by:
Thommy earned 500 total points
ID: 35014926
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
 

Author Closing Comment

by:Delphiwizard
ID: 35014935
Exactly what I needed. Thank you.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 10

Expert Comment

by:Jacco
ID: 35014967
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
 
LVL 10

Expert Comment

by:Jacco
ID: 35014971
lol, too slow :-)
0
 

Author Comment

by:Delphiwizard
ID: 35015079
But thanks anyway, Jacco.
0
 
LVL 19

Expert Comment

by:Thommy
ID: 35015151
Thank you for the points...
:o)))
0
 

Author Comment

by:Delphiwizard
ID: 35015455
Thank you for thanking me :-)
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question