Solved

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

Posted on 2011-03-01
8
1,761 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
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
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

Three Reasons Why Backup is Strategic

Backup is strategic to your business because your data is strategic to your business. Without backup, your business will fail. This white paper explains why it is vital for you to design and immediately execute a backup strategy to protect 100 percent of your data.

Question has a verified solution.

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

Suggested Solutions

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

810 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