2008-09-04 9 views

Respuesta

64
$first = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)); 
$last = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)); 

Consulte date() en la documentación de PHP.

+1

lo que es "1" después de meses $? – FosAvance

+0

no se dio cuenta de que podría hacer una solución tan brillante simplemente agregando "t". Limpio y simple. – Limon

5

El primer día es siempre YYYY-MM-01, ¿no es así? Ejemplo: date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))

Último día es el día anterior del primer día del mes siguiente:

$date = new DateTime("2008-09-01"); 
$date->modify("-1 day"); 
echo $date->format("Y-m-d"); 
3

El primer día del mes es siempre 1. lo que se convertirá

YYYY-MM-01 

la último día se puede calcular como:

<?php 
    $num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 
    echo "There was $num days in August 2003"; 
?> 
2

OK, primero es muy fácil.

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

Última es un poco más complicado, pero no mucho.

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

Si recuerdo mi fecha de PHP cosas correctamente ...

** Editar - Gah! Golpeado hasta que un millón de veces ...

Editar por Pat:

Último día debería haber sido

date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 
0

Por cierto @ZombieSheep solución

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

no funciona debe ser

date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 

Por supuesto, la solución aceptada por Michał Słaby es la más simple.

0

sólo para comprobar que no se pierda ningún cabo suelto:

$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)); 
2
<?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); 
?> 
0

La forma más sencilla de hacerlo es con 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); 

O la última semana

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

O el último año

$dateBegin = strtotime("1/1 last year"); 
$dateEnd = strtotime("12/31 this year"); 
0

probar este para obtener el número de días del mes:

$numdays = date('t', mktime(0, 0, 0, $m, 1, $Y)); 
0

Ejemplo; Quiero obtener el primer día y el último día del mes actual.

$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 

Cuando se ejecuta este, por ejemplo, en la fecha 01/09/2015, la primera y última valores serán secuencialmente;

2015-01-01 
2015-01-31 

Probado.

0

De here(get next month last day) que está marcado como duplicado, por lo que no puedo agregar comentarios allí, pero las personas pueden obtener malas respuestas desde allí.

una correcta para el último día del mes siguiente:

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

una correcta para el primer día del mes siguiente:

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

Código como este se suministra de marzo a partir de enero, por lo que no lo es podría esperarse.

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

Cuestiones relacionadas