How can I find the first and last date in a month using PHP? For example, today is April 21, 2010; I want to find April 1, 2010 and April 30, 2010.
-
possible duplicate : http://stackoverflow.com/questions/1686724/how-to-find-the-last-day-of-the-month-from-date – Oki Erie Rinaldi Jan 20 '15 at 02:25
12 Answers
The easiest way is to use date
, which lets you mix hard-coded values with ones extracted from a timestamp. If you don't give a timestamp, it assumes the current date and time.
// Current timestamp is assumed, so these find first and last day of THIS month
$first_day_this_month = date('m-01-Y'); // hard-coded '01' for first day
$last_day_this_month = date('m-t-Y');
// With timestamp, this gets last day of April 2010
$last_day_april_2010 = date('m-t-Y', strtotime('April 21, 2010'));
date()
searches the string it's given, like 'm-t-Y'
, for specific symbols, and it replaces them with values from its timestamp. So we can use those symbols to extract the values and formatting that we want from the timestamp. In the examples above:
Y
gives you the 4-digit year from the timestamp ('2010')m
gives you the numeric month from the timestamp, with a leading zero ('04')t
gives you the number of days in the timestamp's month ('30')
You can be creative with this. For example, to get the first and last second of a month:
$timestamp = strtotime('February 2012');
$first_second = date('m-01-Y 00:00:00', $timestamp);
$last_second = date('m-t-Y 12:59:59', $timestamp); // A leap year!
See http://php.net/manual/en/function.date.php for other symbols and more details.

- 122,748
- 97
- 336
- 451
-
3Just adding info here, I had problem converting date back to unix timestamp with this format, was fixed by using 'd-m-Y' format rather than 'm-d-Y' .. also the last second will be '23:59:59' rather than '12:59:59' .. – Qarib Haider Jul 10 '16 at 06:49
Simple one
- Y - A full numeric representation of a year, 4 digits
- m - Numeric representation of a month, with leading zeros
- t - Number of days in the given month
Reference - http://www.php.net/manual/en/function.date.php
<?php
echo 'First Date = ' . date('Y-m-01') . '<br />';
echo 'Last Date = ' . date('Y-m-t') . '<br />';
?>

- 1,338
- 1
- 13
- 14
You can use the date function to find how many days in a month there are.
// Get the timestamp for the date/month in question.
$ts = strtotime('April 2010');
echo date('t', $ts);
// Result: 30, therefore, April 30, 2010 is the last day of that month.
Hope that helps.
EDIT: After reading Luis' answer, it occurred to me you may want it in the right format (YY-mm-dd). It may be obvious, but doesn't hurt to mention:
// After the above code
echo date('Y-m-t', $ts);

- 982
- 1
- 8
- 10
This will give you the last day of the month:
function lastday($month = '', $year = '') {
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 month', $result));
return date('Y-m-d', $result);
}
And the first Day:
function firstDay($month = '', $year = '')
{
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
return date('Y-m-d', $result);
}

- 5,979
- 2
- 31
- 51
For specific month and year use date() as natural language as following
$first_date = date('d-m-Y',strtotime('first day of april 2010'));
$last_date = date('d-m-Y',strtotime('last day of april 2010'));
// Isn't it simple way?
but for Current month
$first_date = date('d-m-Y',strtotime('first day of this month'));
$last_date = date('d-m-Y',strtotime('last day of this month'));

- 351
- 4
- 9
If you want to find the first day and last day from the specified date variable then you can do this like below:
$date = '2012-02-12';//your given date
$first_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", first day of this month");
echo $first_date = date("Y-m-d",$first_date_find);
$last_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", last day of this month");
echo $last_date = date("Y-m-d",$last_date_find);
For the current date just simple use this
$first_date = date('Y-m-d',strtotime('first day of this month'));
$last_date = date('Y-m-d',strtotime('last day of this month'));
-
You can replace date("Y-m-d", strtotime($date)) with $date because they are the same but you write less code. – nicolascolman Aug 26 '17 at 19:56
In simple format
$curMonth = date('F');
$curYear = date('Y');
$timestamp = strtotime($curMonth.' '.$curYear);
$first_second = date('Y-m-01 00:00:00', $timestamp);
$last_second = date('Y-m-t 12:59:59', $timestamp);
For next month change $curMonth to $curMonth = date('F',strtotime("+1 months"));

- 605
- 1
- 9
- 30
I got an easiest solution.
$startDate = date("Y-m-d",strtotime("Jan")); //2023-01-01
$endDate = date("Y-m-t",strtotime("Jan")); //2023-01-31
for month you can use data('M')
as the strtotime()
function parameter.

- 11
- 2
$month=01;
$year=2015;
$num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo $num;
display 31 last day of date

- 141
- 1
- 8
You can use DateTimeImmutable::modify()
:
$date = DateTimeImmutable::createFromFormat('Y-m-d', '2021-02-13');
var_dump($date->modify('first day of this month')->format('Y-m-d')); // string(10) "2021-02-01"
var_dump($date->modify('last day of this month')->format('Y-m-d')); // string(10) "2021-02-28"
For those asking in the mysql context, if you have a $dateFrom like '2022-07-02' and want the first date, do this
date('Y-m-01', strtotime( $dateFrom))
You can do similar things for last date etc.

- 329
- 3
- 16
-
@YourCommonSense That gives you the first of the current month (irrespective of what month your currently at). I looked at all the answers and had to think and add them up. This answer will benefit people wanting a quick solution. – Muhammad Mubashirullah Durrani Jul 28 '22 at 06:56