obtener fecha español actual php date strtotime

fecha - PHP date() y strtotime() devuelven meses incorrectos el día 31



strtotime php (4)

Intente usar el "primer día de" en su tiempo de ocio, así:

strtotime("first day of +1 month");

Esto arreglará las fechas (en caso de que el día de hoy fuera el 30 de enero), como 02-30 (rendimientos, 2 de marzo) al convertirlo en 02-01 (1 de febrero), que luego le indica el mes correcto. Es un poco más limpio que otros métodos y es más fácil de recordar.

Estoy usando las funciones date() y strtotime() para mostrar los próximos 3 meses en una lista desplegable.

Código PHP:

echo date("m/Y",strtotime("+0 months")); echo date("m/Y",strtotime("+1 months")); echo date("m/Y",strtotime("+2 months"));

Sin embargo, si la secuencia de comandos se ejecuta cuando la fecha del servidor es 30 o 31, el mes siguiente, que es Feburary, se mostrará en marzo. es decir, se supone que el guión anterior debe regresar

01/2012 02/2012 03/2012

Pero, en lugar de eso, en realidad muestra

01/2012 03/2012 03/2012

eso es porque Feburary no tiene 30 o 31, por lo que el guión traduce "31/02" a "01/03".

He leído la página de strtotime() en php.net, este problema se ha planteado, pero no ha habido ninguna solución útil. Entonces, ¿alguien puede ayudarme a encontrar una forma simple de resolver este problema? ¡Gracias por adelantado!


No use strtotime () para obtener la fecha de compensación por mes (es). Funciona correctamente solo en PHP 5.3+. La mejor forma de resolver ese problema es usar mktime () . A continuación se muestra un código de muestra:

function getOffsetByMonths($nMonths, $nNow = 0) { if ($nNow) return mktime(0, 0, 0, date(''n'', $nNow)+ $nMonths, 1, date(''Y'', $nNow)); else return mktime(0, 0, 0, date(''n'')+ $nMonths); } $nNow = mktime(0, 0, 0, 1, 31, 2013); echo "Now: ". date("Y-m-d", $nNow). "<br>(Now - 1 month): ". date("Y-m", getOffsetByMonths(-1, $nNow)). "-xx". "<br>(Now - 2 month): ". date("Y-m", getOffsetByMonths(-2, $nNow)). "-xx". "<br>(Now - 3 month): ". date("Y-m", getOffsetByMonths(-3, $nNow)). "-xx";


Como se menciona en la documentación, debe pasar la fecha del primer día del mes actual como el segundo parámetro de la función strtotime() :

$base = strtotime(date(''Y-m'',time()) . ''-01 00:00:01''); echo date(''m/Y'',strtotime(''+0 month'', $base)); echo date(''m/Y'',strtotime(''+1 month'', $base)); echo date(''m/Y'',strtotime(''+2 month'', $base));

Ver que funcione: http://ideone.com/eXis9

01/2012

02/2012

03/2012


echo date(''m/Y'', strtotime(date(''Y-m'') . ''-01 +2 months''));

Solo codifíquelo para ser el primero del mes.