2012-05-17 25 views
9

tengo la fecha en este formato (AAAAMM):Fecha actual menos 4 meses?

201201 // Gen, 2012 
201202 // Feb, 2012 
201203 // ecc 

Digamos de 201.203 quiero restar 4 meses. No puedo hacer 201203 - 4 porque es = 201199

201203 - 4 debería salida 201111 (noviembre de 2011)

Tal vez debería convertir mi cadena a una fecha y luego pasarlo a strtotime con -4 meses?

¿Alguna sugerencia?

+0

vistazo a las funciones de explotar y mktime. –

+2

@OZ_, ¿qué ayuda explotaría aquí? –

+0

http://php.net/manual/en/function.mktime.php –

Respuesta

0

Puede usar strtotime para convertir la cadena a una marca de tiempo UNIX, que está en segundos. time() le dará la marca de tiempo UNIX actual. Restar ellos para conseguir la antigüedad de la fecha es en cuestión de segundos, y dividir por 60*60*24 conseguirlo en día

0

Sí, puede convertir la cadena a una fecha (fecha y hora, de hecho) y pasarlo a strtotime():

$dateString = "201201"; 
$minusFourMonth = strtotime(
    "-4 month", 
    strtotime(
     substr($dateString, 0, 4) . "-" . substr($dateString, 4, 2) . "-01" 
    ) 
); 
echo date("Ym", $minusFourMonth); // 201109 
8

strtotime() puede hacerlo, pero tendrá que añadir un día del mes para que se analizar la fecha:

$input = '201203'; 

$input .= '01'; 

$date = strtotime($input .' -4 months'); 

echo date('Ym', $date); 

salidas NOV 2011: las

201111 
+1

Esto funcionó perfectamente para mí, muchas gracias. –

8

Aparte de las versiones strtotime, a partir de PHP 5.3 también puede utilizar DateTime y DateInterval:

$date = DateTime::createFromFormat("Ym", "201201"); 
$interval = new DateInterval("P4M"); // 4 months 
$fourMonthsEarlier = $date->sub($interval); 
echo $fourMonthsEarlier->format("Ym"); 
0

para EX $ da = 2014-04-01

si quieres menos 6 meses utilizar este ..

$date = strtotime($da .' -4 months'); 
$final=date('Y-m-d', $date); 

echo $ final;

0

código anterior no funciona:

$da='2014-08-29'; 
$date = strtotime($da .' -6 months'); 
$final=date('Y-m-d', $date); 
echo $final; 
$date = strtotime($da .' -7 months'); 
$final=date('Y-m-d', $date); 
echo $final; 

Febrero es el desaparecido!

+0

solo falta el 29 de febrero – vladkras

-1
$date = '2016-09-01 00:00:00.000000'; 

$date2 = date("Y-m-d H:i:s.u", strtotime($date." -4 months")); 

echo $date2; 

en ejecución de este código obtendrá 01/05/2016 00: 00: 00.000000

Cuestiones relacionadas