Solved

Function to return last date of quarter

Posted on 2013-11-23
2
473 Views
Last Modified: 2013-11-23
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
Comment
Question by:Delphiwizard
2 Comments
 
LVL 30

Accepted Solution

by:
Marco Gasi earned 500 total points
ID: 39671883
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
 

Author Closing Comment

by:Delphiwizard
ID: 39672212
Excellent, thank you very much.
0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

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…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

746 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now