Как я могу найти первую и последнюю дату через месяц с помощью PHP? Например, сегодня 21 апреля 2010; я хочу найти 1 апреля 2010 и 30 апреля 2010.
Самый простой способ - использовать date
, который позволяет смешивать жестко закодированные значения со значениями, извлеченными из временной метки. Если вы не указали временную метку, она принимает текущую дату и время.
// Current timestamp is assumed, so these find first and last day of THIS month
$first_day_this_month = date('m-01-Y'); // hard-coded '01' for first day
$last_day_this_month = date('m-t-Y');
// With timestamp, this gets last day of April 2010
$last_day_april_2010 = date('m-t-Y', strtotime('April 21, 2010'));
date()
ищет в заданной ему строке, например 'm-t-Y'
, определенные символы и заменяет их значениями из временной метки. Таким образом, мы можем использовать эти символы для извлечения нужных нам значений и форматирования из временной метки. В примерах выше:
Y
дает вам 4-значный год из временной метки ('2010')m
дает вам числовой месяц из временной метки с ведущим нулем ('04')t
дает вам количество дней в месяце временной метки ('30')Вы можете творчески подойти к этому. Например, чтобы получить первую и последнюю секунды месяца:
$timestamp = strtotime('February 2012');
$first_second = date('m-01-Y 00:00:00', $timestamp);
$last_second = date('m-t-Y 12:59:59', $timestamp); // A leap year!
Другие символы и подробности см. в http://php.net/manual/en/function.date.php.
Это даст вам последний день месяца:
function lastday($month = '', $year = '') {
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 month', $result));
return date('Y-m-d', $result);
}
И первый день:
function firstDay($month = '', $year = '')
{
if (empty($month)) {
$month = date('m');
}
if (empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
return date('Y-m-d', $result);
}
Вы можете использовать функцию даты, чтобы узнать, сколько дней в месяце там находятся.
// Get the timestamp for the date/month in question.
$ts = strtotime('April 2010');
echo date('t', $ts);
// Result: 30, therefore, April 30, 2010 is the last day of that month.
Надеюсь, что это поможет.
РЕДАКТИРОВАТЬ: После прочтения ответа Луиса мне пришло в голову, что вы можете захотеть его в правильном формате (ГГ-мм-дд). Это может быть очевидно, но не повредит упомянуть:
// After the above code
echo date('Y-m-t', $ts);