2012-04-20 8 views
8

En un script que contiene¿Diferencia de versión para strtotime ("primer día del mes pasado")?

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

en la versión 5.3.10 (localhost) consigo, por ejemplo, '2012-03-01'.

en la versión 5.2.17 (host remoto) obtengo '1969-12-31'.

¿Hay una expresión que arroje resultados esperados (por ejemplo, '2012-03-01') para ambas versiones?

Respuesta

8

Se debe utilizar la función de mktime():

<?php 
echo date('Y-m-d', mktime(0,0,0,date('n')-1,1,date('Y'))); //2012-03-01 
?> 

See In Action

+0

... o 'strtotime ('-'. (Date ('j') - 1). 'Days -1 month')' – DaveRandom

+0

Debe publicar como respuesta; P, tiendo a permanecer alejado del strtotime mientras puede hacer casi cualquier manipulación de fecha/hora con una función que ha existido desde PHP 3;) –

+0

Muchas gracias. También necesitaba el último día, que ahora es 'date ('Ym-d', mktime (0,0,0, date ('n'), 0, date ('Y')))' – geoB

1

eso es un known bug desde PHP 5.2.17

+0

Sin una solución alternativa? – geoB

+0

@geoB solución alternativa es actualizar –

+0

Sí PHP 5.2.x es * waaay * desactualizado, considere actualizar su versión de PHP por favor. (@DaveRandom lo edité unos segundos después) –

0
date('Y-m-d', strtotime('first day of -1 month') 

funciona bien en PHP 7.0

Cuestiones relacionadas