Dates and timestamps are crucial in many software systems and web applications. They allow us to track events, analyze patterns, and provide users with pertinent information based on time. In this post we’ll explore how to handle dates in PHP, specifically on how to get the date for the last day, or last month or even last year.
Imagine you’re working on a PHP project and you need to fetch last month’s date. The PHP
functions are here to help. However, these functions can lead to misunderstandings if not used correctly.
At first, you might be tempted to use this code:
$prevmonth = date('M Y');
However, this will give you the current month/year, not the last month. To modify this, you can use the PHP
strtotime() function, which parses English textual datetime descriptions into Unix timestamps. This leads us to this solution:
echo date("Y-n-j", strtotime("first day of previous month")); echo date("Y-n-j", strtotime("last day of previous month"));
When running this on November 3, you’ll get 2014-10-1 and 2014-10-31 - the first and last day of the previous month. This method is simple and highly recommended.
A word of caution: Using
strtotime('-1 month', $time) can cause issues with the output. This is because
is the same as
-30 days, which can lead to errors if the current month has 31 days or February is the last month.
So, be cautious while using this method.
One “incorrect” method that is often used is:
$lastMonth = date('M Y', strtotime("-1 month"));
This method is prone to errors. If the current month has 30 or more days but the previous month has less than 30
days, this method will return the same date as the current month. You can test the behaviour with the following
example that will print
Fri, 03 Mar 2023 00:00:00 +0000 and not
Tue, 28 Feb 2023 00:00:00 +0000:
$the_date = strtotime('31.03.2023'); echo date('r', strtotime('-1 month', $the_date));
The correct way to fetch last month’s date in this case would be:
echo date("Y-m", strtotime("first day of previous month"));
The above method will accurately return the first day of the previous month. For example, considering you are in
2023-03-30, than the result would be
2023-02. Note that use only
previous month would result in a
behaviour similar to
Another elegant and reliable method of fetching the previous month’s date is to use PHP’s
DateInterval() functions. Here is an example function:
$now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); echo $lastMonth->format('Y-m');
This function uses
DateTime to get the current date and time and
DateInterval to subtract one month from the current date.
To get the previous day in PHP date has a more direct use, You can simply pass -1 day as a parameter without risking unexpected behavior:
strtotime function is used to convert a date/time description to a Unix timestamp.
$yesterday = date("Y-m-d", strtotime("-1 day")); echo $yesterday;
DateTime class represents date and time and the
modify method alters the timestamp.
$date = new DateTime(); $date->modify('-1 day'); $yesterday = $date->format('Y-m-d'); echo $yesterday;
DateInterval class represents a time interval and can be used with the
sub method of
DateTime to subtract a day.
$date = new DateTime(); $date->sub(new DateInterval('P1D')); $yesterday = $date->format('Y-m-d'); echo $yesterday;
To get the previous year with dates in PHP is quite similar to getting the previous day. All you need to do is
day parameter with
$lastYear = date("Y", strtotime("-1 year")); echo $lastYear;
$date = new DateTime(); $date->modify('-1 year'); $lastYear = $date->format('Y'); echo $lastYear;
$date = new DateTime(); $date->sub(new DateInterval('P1Y')); $lastYear = $date->format('Y'); echo $lastYear;
Remember, dates can be tricky to work with due to variations in days per month, leap years, and different time zones. Therefore, it’s always a good idea to verify your output by running your code with different scenarios.
Now that you have the correct information and the knowledge to implement it, it’s time to put this into action!