Мне нужно получить первый и последний день месяца в формате YYYY-MM-DD с указанием только месяца и года. Есть ли хороший и простой способ сделать это?
В PHP есть ли простой способ получить первую и последнюю дату месяца?
Ответ 1
$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.
Ответ 2
Первый день всегда YYYY-MM-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
Первый день месяца всегда 1. Таким образом, он станет
YYYY-MM-01
последний день может быть рассчитан как:
<?php
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "There was $num days in August 2003";
?>
Ответ 4
ОК, сначала легко.
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...
** edit - Га! Избили его примерно миллион раз...
Редактировать по Пат:
Последний день должен был быть
date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1
Ответ 5
<?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);
?>
Ответ 6
Кстати, решение @ZombieSheep
date ('Y-m-d', mktime(0,0,0,$MM + 1,-1,$YYYY));
не работает, он должен быть
date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1
Конечно, принятое решение Michał Słaby является самым простым.
Ответ 7
Просто чтобы убедиться, что я не пропустил никаких свободных концов:
$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));
Ответ 8
Самый простой способ сделать это с помощью 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");
Ответ 9
попробуйте это, чтобы получить количество дней в месяце:
$numdays = date('t', mktime(0, 0, 0, $m, 1, $Y));
Ответ 10
Пример; Я хочу получить первый и последний день текущего месяца.
$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
Испытано.