variable una ultimo sacar primer obtener mes fecha anterior php mysql optimization date

una - sacar mes en php



¿Cuál es la mejor manera de obtener el primer y último día del mes pasado? (6)

Estoy buscando la mejor manera de obtener el primer y el último día del último mes. Los uso para hacer consultas SQL para obtener estadísticas del mes pasado.

Creo que esta es la mejor manera, más optimizada pero no más comprensiva, ¿alguien tiene otra manera de hacer lo mismo?

$month_ini = date("Y-m-d", mktime(0, 0, 0, date("m", strtotime("-1 month")), 1, date("Y", strtotime("-1 month")))); $month_end = date("Y-m-d", mktime(0, 0, 0, date("m", strtotime("-1 month")), date("t", strtotime("-1 month")), date("Y", strtotime("-1 month"))));

¡¡Gracias!!


Último día del mes anterior:

date("Y-m-d", mktime(0, 0, 0, date("m"), 0));

Primer día del mes anterior:

date("Y-m-d", mktime(0, 0, 0, date("m")-1, 1));


En PHP 5.3, puede usar la clase DateTime :

<?php $month_ini = new DateTime("first day of last month"); $month_end = new DateTime("last day of last month"); echo $month_ini->format(''Y-m-d''); // 2012-02-01 echo $month_end->format(''Y-m-d''); // 2012-02-29


Los uso en scripts MySQL y PHP, cortos y simples:

echo date(''Y-m-d'', strtotime(''first day of last month'')); echo date(''Y-m-d'', strtotime(''last day of last month''));

Ejemplo de uso de MySQL:

$query = $db->query("SELECT * FROM mytable WHERE 1 AND mydate >= ''".date(''Y-m-d'', strtotime(''first day of last month''))."''");


Si está haciendo esto con el propósito de una consulta MySQL, ¿ha considerado utilizar la función MES , por ejemplo,

SELECT [whatever stats you''re after] FROM table WHERE MONTH(date_field) = 12 and YEAR(date_field) = 2011

Esto obtendría tus estadísticas para diciembre. Si comienza a experimentar problemas de rendimiento y los datos históricos no cambian, es posible que desee desnormalizar los datos en una tabla agregada (acumulada por el incremento más pequeño que necesita, por ejemplo, diario / por hora / mensual, etc.).


deja que mysql se ocupe de las fechas.

cualquier cosa que sea para la base de datos, déjalo hacer.

Me gusta esto:

mysql_query("set @last_day=last_day(now()-interval 1 month),@first_day=(@last_day-interval 1 month)+interval 1 day"); $result=mysql_query("select * from `table` where (`date` between @first_day and @last_day)");

lo mejor es que esto funcionará incluso si el año cambia.

solo recuerde cambiar la zona horaria de la base de datos para que coincida con php.


puedes hacer esto en MySQL:

WHERE `DateAndTime` >= ''2012-02-01 00:00:00'' AND `DateAndTime` < ''2012-03-01 00:00:00''