Временные отметки начала и конца месяца

Как получить временные метки первой и последней минуты любого месяца с помощью PHP?

Вы можете использовать mktime и date :

 $first_minute = mktime(0, 0, 0, date("n"), 1); $last_minute = mktime(23, 59, 59, date("n"), date("t")); 

То есть за текущий месяц. Если вы хотите иметь его в течение любого месяца, вы соответственно меняете параметры месяца и дня.

Если вы хотите генерировать его на каждый месяц, вы можете просто выполнить цикл:

 $times = array(); for($month = 1; $month <= 12; $month++) { $first_minute = mktime(0, 0, 0, $month, 1); $last_minute = mktime(23, 59, 59, $month, date('t', $first_minute)); $times[$month] = array($first_minute, $last_minute); } 

DEMO

С PHP 5.3 вы можете сделать

 $oFirst = new DateTime('first day of this month'); $oLast = new DateTime('last day of this month'); $oLast->setTime(23, 59, 59); 

В PHP 5.2

Примечание . Как указано в AllThecode в комментариях ниже, этот следующий пример работает только в том случае, если вы сначала $oFirst . Если вы добавите +1 month к new DateTime результат переместится на дополнительный месяц в последний день месяца (как на php 5.5.9).

 $oToday = new DateTime(); $iTime = mktime(0, 0, 0, $oToday->format('m'), 1, $oToday->format('Y')); $oFirst = new DateTime(date('r', $iTime)); $oLast = clone $oFirst; $oLast->modify('+1 month'); $oLast->modify('-1 day'); $oLast->setTime(23, 59, 59); 

Используйте mktime для генерации временных меток из значений hour / month / day / … и cal_days_in_month, чтобы получить количество дней в месяц:

 $month = 1; $year = 2011; $firstMinute = mktime(0, 0, 0, $month, 1, $year); $days = cal_days_in_month(CAL_GREGORIAN, $month, $year); $lastMinute = mktime(23, 59, 0, $month, $days, $year); 

Я думаю, что лучше тогда

 $first_minute = mktime(0, 0, 0, date("n"), 1); $last_minute = mktime(23, 59, 0, date("n"), date("t")); 

является:

 $first_minute = mktime(0, 0, 0, date("n"), 1); $last_minute = mktime(23, 59, 0, date("n") + 1, 0); 

Для этого требуется PHP> 5.2 и требуется настройка для части «минут»

 $year = ...; // this is your year $month = ...; // this is your month $month = ($month < 10 ? '0' . $month : $month); $start = new DateTime($year . '-' . $month . '-01 00:00:00'); $end = $start->modify('+1 month -1 day -1 minute'); //perhaps this need 3 "->modify" echo $start->format('U'); echo $end->format('U'); 

(не испытано)

Ссылка: http://www.php.net/manual/en/class.datetime.php