В PHP есть простой способ получить первую и последнюю дату месяца? - PullRequest
33 голосов
/ 04 сентября 2008

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

Ответы [ 11 ]

63 голосов
/ 04 сентября 2008
$first = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year));
$last = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year));

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

6 голосов
/ 04 сентября 2008

Первый день всегда ГГГГ-ММ-01, не так ли? Пример: date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))

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

$date = new DateTime("2008-09-01");
$date->modify("-1 day");
echo $date->format("Y-m-d");
3 голосов
/ 04 сентября 2008

Первый день месяца всегда равен 1. Так станет

YYYY-MM-01

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

<?php
    $num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
    echo "There was $num days in August 2003";
?>
2 голосов
/ 10 февраля 2012
<?php
echo "Month Start - " . $monthStart = date("Y-m-1") . "<br/>";
$num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y"));
echo "Monthe End - " . $monthEnd = date("Y-m-".$num);
?>
2 голосов
/ 04 сентября 2008

ОК, во-первых, это очень просто.

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

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

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

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

** редактировать - Гах! Били ему около миллиона раз ...

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

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

date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1
0 голосов
/ 04 января 2018

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

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

echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-t'));

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

echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-01'));

Код, подобный этому, предоставит март с января, так что это не то, чего можно было ожидать.

echo ((new DateTime())->modify('+1 month')->format('Y-m-t'));

0 голосов
/ 09 января 2015

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

$month   = (int) date('F');
$year    = (int) date('Y');

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

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

2015-01-01
2015-01-31

Проверено.

0 голосов
/ 13 июля 2013

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

$numdays = date('t', mktime(0, 0, 0, $m, 1, $Y));
0 голосов
/ 17 мая 2013

Самый простой способ сделать это с помощью 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");
0 голосов
/ 08 сентября 2008

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

$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('Y-m-d', mktime(0, 0, 0, $startMonth , $startDay, $startYear));
$endDate = date('Y-m-d', mktime(0, 0, 0, $endMonth, $endDay, $endYear));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...