Quiero obtener la fecha del mes pasado. Escribí esto:
$prevmonth = date('M Y');
Lo que me da el mes / año actual. No puedo decir si debería usar strtotime
, mktime
. ¿Algo relacionado con la marca de tiempo? ¿Debo agregar algo después para restablecer, de modo que la fecha no se establezca en el último mes en todo para todas las marcas de tiempo en mi sitio? Estoy intentando RTM, pero me resulta difícil darme cuenta.
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
este devolverá el miércoles 02 de marzo de 2011 01:01:01 - ¡no febrero! Úselo en sustrtotime('first day of previous month')
lugarecho strtotime("-1 month");
Eso generará la marca de tiempo del último mes exactamente. No es necesario restablecer nada después. Si lo desea en un formato en inglés después de eso, puede usar date () para formatear la marca de tiempo, es decir:
echo date("Y-m-d H:i:s",strtotime("-1 month"));
fuente
$prevmonth = date('M Y', strtotime("last month"));
fuente
Las respuestas incorrectas son:
$lastMonth = date('M Y', strtotime("-1 month")); $lastDate = date('Y-m', strtotime('last month'));
La razón es si el mes actual tiene más de 30 días pero el mes anterior es 29 y menos $ lastMonth será el mismo que el mes actual.
p.ej
If $currentMonth = '30/03/2016'; echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016 echo $lastDate = date('Y-m', strtotime('last month')); => 2016-03
La respuesta correcta será:
echo date("m-Y", strtotime("first day of previous month")); => 02-2016 echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016 echo date("m-Y",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016
fuente
si desea obtener el mes anterior, puede usarlo como sigue
$prevmonth = date('M Y', strtotime('-1 months'));
Si desea obtener los mismos días del mes anterior, puede usarlo como sigue.
$prevmonth = date('M Y d', strtotime('-1 months'));
Si desea obtener la última fecha del mes anterior, puede usarlo como sigue ...
$prevmonth = date('M Y t', strtotime('-1 months'));
Si desea obtener la primera fecha del mes anterior, puede usarlo como sigue ...
$prevmonth = date('M Y 1', strtotime('-1 months'));
fuente
echo date('Y',strtotime("-1 year")); //last year<br> echo date('d',strtotime("-1 day")); //last day<br> echo date('m',strtotime("-1 month")); //last month<br>
fuente
Encontré este mal cuando los meses anteriores son más cortos que los actuales.
echo date("Y-m-d H:i:s",strtotime("-1 month"));
Pruebe el 30 de marzo y obtendrá 2012-03-01 en lugar de 2012-02 ...
Trabajando en una mejor solución ...
fuente
public function getLastMonth() { $now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); return $lastMonth->format('Ym'); }
fuente
2015-10-31
en PHP 5.5 y 5.6.11. Obtendrá el201510
mismo comportamiento que constrtotime('- 1 month)
.Utilice este código corto para obtener el mes anterior para cualquier fecha determinada:
$tgl = '25 january 2012'; $prevmonth = date("M Y",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl)))); echo $prevmonth;
El resultado es diciembre de 2011. Funciona en un mes con un día más corto que el mes anterior.
fuente
$lastMonth = date('M Y', strtotime("-1 month")); var_dump($lastMonth); $lastMonth = date('M Y', mktime(0, 0, 0, date('m') - 1, 1, date('Y'))); var_dump($lastMonth);
fuente
Puedes usar
strtotime
, lo cual es genial en este tipo de situaciones:$timestamp = strtotime('-1 month'); var_dump(date('Y-m', $timestamp));
Te conseguirá:
string '2009-11' (length=7)
fuente
$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y")); $lastMonth = date("d-m-Y", $time);
O
$lastMonth = date("m-Y", mktime() - 31*3600*24);
funciona el 30.03.2012
fuente
Oh, me di cuenta de esto, ignórelo a menos que tenga el mismo problema que yo, en cuyo caso:
$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y")));
fuente
La mejor solución que he encontrado es esta:
function subtracMonth($currentMonth, $monthsToSubtract){ $finalMonth = $currentMonth; for($i=0;$i<$monthsToSubtract;$i++) { $finalMonth--; if ($finalMonth=='0'){ $finalMonth = '12'; } } return $finalMonth; }
Entonces, si estamos en 3 (marzo) y queremos restar 5 meses, eso sería
subtractMonth(3,5);
lo que daría 10 (octubre). Si también se desea el año, se podría hacer esto:
function subtracMonth($currentMonth, $monthsToSubtract){ $finalMonth = $currentMonth; $totalYearsToSubtract = 0; for($i=0;$i<$monthsToSubtract;$i++) { $finalMonth--; if ($finalMonth=='0'){ $finalMonth = '12'; $totalYearsToSubtract++; } } //Get $currentYear //Calculate $finalYear = $currentYear - $totalYearsToSubtract //Put resulting $finalMonth and $finalYear into an object as attributes //Return the object }
fuente
Esto funciona para mi:
Hoy es: 31/03/2012
echo date("Y-m-d", strtotime(date('m', mktime() - 31*3600*24).'/01/'.date('Y').' 00:00:00')); // 2012-02-01 echo date("Y-m-d", mktime() - 31*3600*24); // 2012-02-29
fuente
Si desea obtener la primera fecha del mes anterior, puede usarlo como sigue ...
$prevmonth = date('M Y 1', strtotime('-1 months'));
¿qué? la primera cita siempre será 1: Dfuente
Esta pregunta es bastante antigua, pero aquí va de todos modos. Si está tratando de obtener solo el mes anterior y el día no importa, puede usar esto:
$date = '2014-01-03'; $dateTime = new DateTime($date); $lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y'); echo $lastMonth; // 'December 2013'
fuente
Simplemente obtenga el mes pasado.
Ejemplo:
Hoy es: 2020-09-02
Código:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
Resultado:
fuente
31
y el mes no es enero o agosto (como se2020 May 31
convierte2020 April 31
, eso no existe)