• Status: Solved
• Priority: Medium
• Security: Public
• Views: 500
• Last Modified:

# Function to return last date of quarter

Hi,

Does anybody have a function that returns the last date of a quarter based on a given date.

Input: 1-1-2013 -> Return: 31-3-2013
Input: 15-2-2013 -> Return: 31-3-2013
Input: 7-6-2013 -> Return: 30-6-2013
etc.
0
Stef Merlijn
Asked:
1 Solution

FreelancerCommented:
You can use this:

``````function GetLastDayOfQuarter(DT: TDateTime): TDateTime;
begin
Result := Now();
if  InRange(MonthOf(DT), 1, 3) then
Result := EndOfAMonth(YearOf(DT), 3)
else
if  InRange(MonthOf(DT), 4, 6) then
Result := EndOfAMonth(YearOf(DT), 6)
else
if  InRange(MonthOf(DT), 7, 9) then
Result := EndOfAMonth(YearOf(DT), 9)
else
if  InRange(MonthOf(DT), 10, 12) then
Result := EndOfAMonth(YearOf(DT), 12);
end;
``````

This is the test program:

Form:
``````object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 219
ClientWidth = 340
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 104
Top = 48
Width = 140
Height = 33
Caption = '00/00/0000'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -27
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object DateTimePicker1: TDateTimePicker
Left = 80
Top = 128
Width = 186
Height = 21
Date = 41601.925650833340000000
Time = 41601.925650833340000000
TabOrder = 0
OnChange = DateTimePicker1Change
end
end
``````

Unit:
``````unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, System.DateUtils, System.Math,
Vcl.StdCtrls;

type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
Label1: TLabel;
procedure DateTimePicker1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{\$R *.dfm}

function GetLastDayOfQuarter(DT: TDateTime): TDateTime;
begin
if  InRange(MonthOf(DT), 1, 3) then
Result := EndOfAMonth(YearOf(DT), 3)
else
if  InRange(MonthOf(DT), 4, 6) then
Result := EndOfAMonth(YearOf(DT), 6)
else
if  InRange(MonthOf(DT), 7, 9) then
Result := EndOfAMonth(YearOf(DT), 9)
else
if  InRange(MonthOf(DT), 10, 12) then
Result := EndOfAMonth(YearOf(DT), 12);
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
Label1.Caption := DateToStr(GetLastDayOfQuarter(DateTimePicker1.DateTime));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption := DateToStr(Now());
end;

end.
``````
0

DeveloperAuthor Commented:
Excellent, thank you very much.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Featured Post

Tackle projects and never again get stuck behind a technical roadblock.