Как получить временные метки первой и последней минуты любого месяца с помощью 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');
(не испытано)