ultimo - Encontrando el último día del mes anterior en PHP
primer dia y ultimo dia del mes php (5)
No estoy seguro de por qué esto no puede encontrar el último día del mes anterior. Todos los pasos parecen funcionar correctamente, excepto cuando se crea la fecha final.
<?php
$currentMonth = date(''n'');
$currentYear = date(''Y'');
if($currentMonth == 1) {
$lastMonth = 12;
$lastYear = $currentYear - 1;
}
else {
$lastMonth = $currentMonth -1;
$lastYear = $currentYear;
}
if($lastMonth < 10) {
$lastMonth = ''0'' . $lastMonth;
}
$lastDayOfMonth = date(''t'', $lastMonth);
$lastDateOfPreviousMonth = $lastYear . ''-'' . $lastMonth . ''-'' . $lastDayOfMonth;
$newLastDateOfMonth = date(''F j, Y'', strtotime($lastDateOfPreviousMonth));
?>
$lastDateOfPreviousMonth
regresará el 2012-09-30 como se esperaba; sin embargo, después de intentar convertirlo al 30 de septiembre de 2012, $newLastDateOfMonth
regresará el 1 de octubre de 2012. ¿Dónde me parece que me estoy yendo mal?
EDITAR: Si usa la date("t/m/Y", strtotime("last month"));
o date(''Ym-d'', strtotime(''last day of previous month''));
¿Alguno de estos seguirá siendo viable a partir del 2013-01-01, es decir, tendrán en cuenta el cambio en el año?
Hay una función php para esto.
echo date("t/m/Y", strtotime("last month"));
Primer día de este mes, menos 1 segundo.
echo date(''Y-m-d'',strtotime(''-1 second'',strtotime(date(''m'').''/01/''.date(''Y''))));
Ejemplo here .
Puedes usar la funcionalidad de manejo de cero de strtotime()
para lograr esto también:
# Day Before
echo date(''Y-m-d'', strtotime(''2016-03-00'')); // 2016-02-29
# Year can be handled too
echo date(''Y-m-d'', strtotime(''2016-01-00'')); // 2015-12-31
# Month Before
echo date(''Y-m-d'', strtotime(''2016-00-01'')); // 2015-12-01
# Month AND Day
echo date(''Y-m-d'', strtotime(''2016-00-00'')); // 2015-11-30
Tiene sentido si piensa en 00 como ''uno menos que el primero (01)''.
Entonces, para lograr el objetivo de esta pregunta, el ''último día del mes anterior'' es un caso simple de
date(''your_format'', strtotime(''YYYY-ThisMonth-00''));
# So:
date(''Y-m-d'', strtotime(''2016-11-00'')); // 2016-10-31
por favor intente con la siguiente respuesta.
código:
echo date("t/m/Y", strtotime("-1 months"));
Obtendrá el último día de los 12 meses anteriores.
Ejemplo:
<?php
for ($i = 1; $i <= 12; $i++) {
$months[] = date("t/m/Y l", strtotime(" -$i months"));
}
print_r($months);
?>
Salida:
Array
(
[0] => 30/11/2018 Monday
[1] => 31/10/2018 Friday
[2] => 30/09/2018 Wednesday
[3] => 31/08/2018 Sunday
[4] => 31/07/2018 Thursday
[5] => 30/06/2018 Tuesday
[6] => 31/05/2018 Saturday
[7] => 30/04/2018 Thursday
[8] => 31/03/2018 Monday
[9] => 28/02/2018 Monday
[10] => 31/01/2018 Friday
[11] => 31/12/2017 Tuesday
)
echo date(''Y-m-d'', strtotime(''last day of previous month''));
//2012-09-30
o
$date = new DateTime();
$date->modify("last day of previous month");
echo $date->format("Y-m-d");
Edición posterior: documentación de php.net - formatos relativos para strtotime (), DateTime y date_create ()