¿Cómo puedo encontrar la primera y la última fecha en un mes usando PHP?

82

¿Cómo puedo encontrar la primera y la última fecha en un mes usando PHP? Por ejemplo, hoy es 21 de abril de 2010; Quiero encontrar el 1 de abril de 2010 y el 30 de abril de 2010.

Karthik
fuente
posible duplicado: stackoverflow.com/questions/1686724/…
Oki Erie Rinaldi

Respuestas:

205

La forma más sencilla es usarlo date, que le permite mezclar valores codificados de forma rígida con valores extraídos de una marca de tiempo. Si no proporciona una marca de tiempo, asume la fecha y hora actuales.

// 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()busca en la cadena que se le da, como 'm-t-Y', símbolos específicos, y los reemplaza con valores de su marca de tiempo. Entonces, podemos usar esos símbolos para extraer los valores y el formato que queremos de la marca de tiempo. En los ejemplos anteriores:

  • Y le da el año de 4 dígitos de la marca de tiempo ('2010')
  • m le da el mes numérico de la marca de tiempo, con un cero inicial ('04')
  • t le da la cantidad de días en el mes de la marca de tiempo ('30')

Puedes ser creativo con esto. Por ejemplo, para obtener el primer y último segundo de un mes:

$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!

Consulte http://php.net/manual/en/function.date.php para ver otros símbolos y más detalles.

Nathan Long
fuente
3
Simplemente agregando información aquí, tuve problemas para convertir la fecha a la marca de tiempo de Unix con este formato, se solucionó usando el formato 'dmY' en lugar de 'mdY' ... también el último segundo será '23: 59: 59 'en lugar de '12 : 59: 59 '..
Syed Qarib
26

Simple

  • Y: una representación numérica completa de un año, 4 dígitos
  • m: representación numérica de un mes, con ceros a la izquierda
  • t - Número de días en el mes dado

Referencia: http://www.php.net/manual/en/function.date.php

<?php
    echo 'First Date    = ' . date('Y-m-01') . '<br />';
    echo 'Last Date     = ' . date('Y-m-t')  . '<br />';
?>
Siva Kranthi Kumar
fuente
18

Puede usar la función de fecha para encontrar cuántos días hay en un mes.

// 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.

Espero que ayude.

EDITAR: Después de leer la respuesta de Luis, se me ocurrió que quizás lo desee en el formato correcto (YY-mm-dd). Puede ser obvio, pero no está de más mencionar:

// After the above code
echo date('Y-m-t', $ts); 
Henrik L.
fuente
11

Esto le dará el último día del mes:

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);
}

Y el primer día:

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);
} 
Luis
fuente
5

Para el mes y año específicos, use la fecha () como lenguaje natural de la siguiente manera

$first_date = date('d-m-Y',strtotime('first day of april 2010'));
$last_date = date('d-m-Y',strtotime('last day of april 2010'));
// Isn't it simple way?

pero para el mes actual

$first_date = date('d-m-Y',strtotime('first day of this month'));
$last_date = date('d-m-Y',strtotime('last day of this month'));
Jimil Choksi
fuente
5

Si desea encontrar el primer día y el último día de la variable de fecha especificada, puede hacerlo de la siguiente manera:

$date    =    '2012-02-12';//your given date

$first_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", first day of this month");
echo $first_date = date("Y-m-d",$first_date_find);

$last_date_find = strtotime(date("Y-m-d", strtotime($date)) . ", last day of this month");
echo $last_date = date("Y-m-d",$last_date_find);

Para la fecha actual, simplemente use esto

$first_date = date('Y-m-d',strtotime('first day of this month'));
$last_date = date('Y-m-d',strtotime('last day of this month'));
Faisal
fuente
Puede reemplazar date ("Ymd", strtotime ($ date)) con $ date porque son iguales pero escribe menos código.
nicolascolman
2

Para obtener la primera y última fecha de Last Month;

$dateBegin = strtotime("first day of last month");  
$dateEnd = strtotime("last day of last month");

echo date("D-F-Y", $dateBegin);  
echo "<br>";        
echo date("D-F-Y", $dateEnd);
karuppub
fuente
2

En formato simple

   $curMonth = date('F');
   $curYear  = date('Y');
   $timestamp    = strtotime($curMonth.' '.$curYear);
   $first_second = date('Y-m-01 00:00:00', $timestamp);
   $last_second  = date('Y-m-t 12:59:59', $timestamp); 

Para el próximo mes, cambie $ curMonth a $ curMonth = date ('F', strtotime ("+ 1 mes"));

Yasar Arafath
fuente
0
$month=01;
$year=2015;
$num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo $num;

mostrar 31 último día de la fecha

SunUser
fuente