Agregar tres meses a una fecha en PHP

90

Tengo una variable llamada que $effectiveDatecontiene la fecha 2012-03-26 .

Estoy tratando de agregar tres meses a esta fecha y no lo he logrado.

Esto es lo que he probado:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

y

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

¿Qué estoy haciendo mal? Ninguna pieza de código funcionó.

usuario979331
fuente
6
¿Qué significa "no funcionó"?
Jon
2
Recibo 1340649000como respuesta, que parece ser correcta.
Dogbert
¿Estás seguro de que $effectiveDatealmacena lo que crees que almacena? Funciona para mi .
Josh
Espero que esa fecha sea 2012-06-26 agregando 3 meses a 2012-03-26
user979331
Y date('Y-m-d', 1340661600)da lo 2012-06-26que ES correcto.
Tchoupi

Respuestas:

193

Cambiarlo a esto le dará el formato esperado:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));
Tchoupi
fuente
¿Cómo lidiar con una variable de meses? como $ meses contiene el número de meses? "+ '$months' months"no funciona
HKK
4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman
date () no usa localizaciones. Mejor es strftime ().
user706420
2
Eso no funcionará para fechas como esta: fecha ('2018-01-31', strtotime ('+ 3 meses')). Si la fecha finaliza en 31 y los próximos 3 meses no, no devolverá la fecha correcta.
Dan H
3
no es una buena solución - no devuelve valores correctos - como mencionó Dan H
Josef Vancura
17

Esta respuesta no es exactamente a esta pregunta. Pero agregaré esto ya que esta pregunta aún se puede buscar sobre cómo agregar / deducir un período de la fecha.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;
Sadee
fuente
5

Supongo que con "no funcionó" quiere decir que le está dando una marca de tiempo en lugar de la fecha formateada, porque lo estaba haciendo correctamente:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version
Mella
fuente
3

Debe convertir la fecha en un valor legible. Puede usar strftime () o date ().

Prueba esto:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Esto debería funcionar. Me gusta usar strftime mejor, ya que se puede usar para la localización, es posible que desee probarlo.

JohnnyQ
fuente
3

La respuesta de Tchoupi se puede hacer un poco menos detallada al concatenar el argumento para strtotime () de la siguiente manera:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Esto depende de los detalles mágicos de la implementación, pero siempre puedes echarles un vistazo si desconfías con razón)

regocijo
fuente
2

Lo siguiente debería funcionar, intente esto:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);
Dipak kukadiya
fuente
1

Lo siguiente debería funcionar

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 
Ricky
fuente
1

Agregue n días, meses y años

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}
Rahul Gandhi
fuente
0

Lo siguiente debería funcionar, pero es posible que deba cambiar el formato:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Brendon Dugan
fuente