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

Как я могу найти первую и последнюю дату через месяц с помощью PHP? Например, сегодня 21 апреля 2010; я хочу найти 1 апреля 2010 и 30 апреля 2010.

75
задан S.L. Barth - Reinstate Monica 19 July 2012 в 15:33
поделиться

3 ответа

Самый простой способ - использовать 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.

196
ответ дан 24 November 2019 в 11:26
поделиться

Это даст вам последний день месяца:

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);
} 
11
ответ дан 24 November 2019 в 11:26
поделиться

Вы можете использовать функцию даты, чтобы узнать, сколько дней в месяце там находятся.

// 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); 
16
ответ дан 24 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: