• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 494
  • 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

Featured Post

The 14th Annual Expert Award Winners

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

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