• 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:
Stef Merlijn
1 Solution
 
Marco GasiFreelancerCommented:
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;

Open in new window


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

Open in new window


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.

Open in new window

0
 
Stef MerlijnDeveloperAuthor 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.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

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