Hey, PowerShell! Given a specific date, how can I determine the beginning and ending date of the previous month? In other words, given 8/11/2005, I need to get back 7/1/2005 and 7/31/2005.

Powershell provides access to .Net framework.  We can use .Net framework  DateTime class to solve the problem.  Let's write a script to solve this.

First, we need to get the date for which we need to determine the beginning and ending date of previous month. We can do this using PowerShell Param statement

 

Param ([System.Datetime] $date = $(get-date))

In the above statement, we are declaring a parameter of type Syste.DateTime.  We are also initializing it to current date when no parameter is specified.  It works as follows.  Let's say that we have saved the above as script file  BeginEndPrevMonth.ps1 then

.\BeginEndPrevMonth.ps1  11/18/2006

will set the $date variable to  11/18/2006.  However, if you don't specify the parameter like

.\BeginEndPrevMonth.ps1

then PowerShell parser will execute the  $(get-date)  which will get you the current date and time and this value gets assigned to $date.

 

Let's move on.  Now that we have a date,  we need to find the beginning and endind date of the previous month of this date.  Let's start the end date.  if I have a date like  8/11/2005,  then I find out the last date of previous month by subtracting the number of days in the current date.  In the example, if I subtract 11 then I will get 7/31/2005.  We can accomplish this in the script as follows

 

First,  determine the number of days in given date

$numdays = $date.Day

Once we have determined the number days,  we need to subtract this from the current date to get the last date of previous month.  There is no subract method available in  Datetime class. however, there is a AddDays method.  We can use this method to subtract days by passing in a  negative value to add. 

 

$prevmonthlastday = $date.AddDays(- $numdays)

We are calling  AddDays method in DateTime with  - $numdays to subtract the number of days.  We use the similar logic to subtract the number of days from  $prevmonthlastday to determine that last day of previou to previous month and then add 1 day to get the first date.

 

 

$numdays = $prevmonthlastday.Day
$prevmonthfirstday = $prevmonthlastday.AddDays( -$numdays + 1)

 

The full script is  as follows

 

 

Param ([system.Datetime] $date = $(get-date))

Write-Output $("The selected date is {0}" -f $date )


$numdays = $date.Day


$prevmonthlastday = $date.AddDays(-$numdays)

Write-Output $("Last date of previous month of given date is {0}" -f $prevmonthlastday )

$numdays = $prevmonthlastday.Day
$prevmonthfirstday = $prevmonthlastday.AddDays( -$numdays + 1)

Write-Output $("First date of previous month of given date is {0}" -f $prevmonthfirstday)

 

There you go ,  a script to determine beginning and ending date of previous month of a given date.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Arul Kumaravel

Development Manager

Windows PowerShell