Как получить временные метки первой и последней минут в любом месяце с помощью PHP?
Временные отметки начала и конца месяца
Ответ 1
Вы можете использовать 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);
}
Ответ 2
С 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);
Ответ 3
Используйте mktime для создания временных меток из значений часа/месяца/дня/... и 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);
Ответ 4
Я думаю, лучше, чем
$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);
Ответ 5
Для этого требуется 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');
(не проверено)
Ответ 6
$date = new \DateTime('now');//Current time
$date->modify("-1 month");//get last month
$startDate = $date->format('Y-m-01');
$endDate = $date->format('Y-m-t');
Ответ 7
Лучший способ сделать это..
$ first_day = date ('m-01-Y h: i: s', strtotime ("-1 месяцев"));
$ last_day = date ('m-t-Y h: i: s', strtotime ("-1 месяцев"));