В PHP есть ли простой способ получить первую и последнюю дату месяца?

Мне нужно получить первый и последний день месяца в формате YYYY-MM-DD с указанием только месяца и года. Есть ли хороший и простой способ сделать это?

Solutions Collecting From Web of "В PHP есть ли простой способ получить первую и последнюю дату месяца?"

$first = date('Ym-d', mktime(0, 0, 0, $month, 1, $year)); $last = date('Ym-t', mktime(0, 0, 0, $month, 1, $year)); 

См. Дату () в документации PHP.

Первый день всегда YYYY-MM-01, не так ли? Пример: date("YMd", mktime(0, 0, 0, 8, 1, 2008))

Последний день – предыдущий день следующего месяца следующего месяца:

 $date = new DateTime("2008-09-01"); $date->modify("-1 day"); echo $date->format("Ymd"); 

Первый день месяца всегда 1. Итак, это станет

 YYYY-MM-01 

последний день можно рассчитать как:

 <?php $num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 echo "There was $num days in August 2003"; ?> 

Хорошо, сначала легко.

 date ('Ym-d', mktime(0,0,0,MM,01,YYYY)); 

Последнее немного сложнее, но немного.

 date ('Ym-d', mktime(0,0,0,MM + 1,-1,YYYY)); 

Если я правильно помню дату PHP PHP

** edit – Га! Избиты ему миллион раз …

Редактировать по Пэт:

Последний день должен был быть

 date ('Ym-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 
 <?php echo "Month Start - " . $monthStart = date("Ym-1") . "<br/>"; $num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); echo "Monthe End - " . $monthEnd = date("Ym-".$num); ?> 

Кстати, решение @ZombieSheep

 date ('Ym-d', mktime(0,0,0,$MM + 1,-1,$YYYY)); 

не работает, это должно быть

 date ('Ym-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 

Разумеется, принятое решение Михала Слаби является самым простым.

Просто чтобы убедиться, что я не пропустил никаких свободных концов:

 $startDay = 1; if (date("m") == 1) { $startMonth = 12; $startYear = date("Y") - 1; $endMonth = 12; $endYear = date("Y") - 1; } else { $startMonth = date("m") - 1; $startYear = date("Y"); $endMonth = date("m") - 1; $endYear = date("Y"); } $endDay = date("d") - 1; $startDate = date('Ym-d', mktime(0, 0, 0, $startMonth , $startDay, $startYear)); $endDate = date('Ym-d', mktime(0, 0, 0, $endMonth, $endDay, $endYear)); 

Самый простой способ сделать это с помощью PHP – это

 $dateBegin = strtotime("first day of last month"); $dateEnd = strtotime("last day of last month"); echo date("MYDATEFORMAT", $dateBegin); echo "<br>"; echo date("MYDATEFORMAT", $dateEnd); 

Или на прошлой неделе

 if (date('N', time()) == 7) { $dateBegin = strtotime("-2 weeks Monday"); $dateEnd = strtotime("last Sunday"); } else { $dateBegin = strtotime("Monday last week"); $dateEnd = strtotime("Sunday last week"); } 

Или в прошлом году

 $dateBegin = strtotime("1/1 last year"); $dateEnd = strtotime("12/31 this year"); 

попробуйте это, чтобы получить количество дней в месяце:

 $numdays = date('t', mktime(0, 0, 0, $m, 1, $Y)); 

Пример; Я хочу получить первый и последний день текущего месяца.

 $month = (int) date('F'); $year = (int) date('Y'); date('Ym-d', mktime(0, 0, 0, $month + 1, 1, $year)); //first date('Ym-d', mktime(0, 0, 0, $month + 2, 0, $year)); //last 

Когда вы запускаете это, например, на дату 2015-01-09, первое и последнее значения будут последовательно;

 2015-01-01 2015-01-31 

Проверено.