Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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);
}

DEMO

Ответ 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');

(не проверено)

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

Ответ 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 месяцев"));