Fecha actual + 2 meses

3 minutos de lectura

avatar de usuario
Morgi

Escribí este fragmento de código para mostrar la fecha actual + 2 meses:

<?php
    $date = date("d/m/Y");
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months");
    $date = date("d/m/Y",$date);
    echo $date;
?>

No parece funcionar como se muestra: 03/01/1970.

¿Qué estoy haciendo mal?

Gracias por tu ayuda.

EDITAR :

Después de leer los comentarios y las respuestas, lo simplifiqué y lo corregí.

<?php
    $date = date("d/m/Y", strtotime(" +2 months"));
    echo $date;
?>

  • Trate de poner un espacio antes de su +2. Y tal vez use dos variables: usar el mismo nombre de variable una y otra vez para diferentes tipos de datos es confuso y una mala práctica.

    – WWW

    14 mayo 2012 a las 15:46

  • La verificación adecuada del valor de retorno también ayuda.

    – hakré

    18 de mayo de 2012 a las 12:34

Te falta el segundo argumento para el segundo strtotime() llamar:

echo date('d/m/Y', strtotime('+2 months'));

  • Tenga mucho cuidado al usar strotime. El 31 de julio, date(‘dmY’) arroja “31072014” mientras que date(‘dmY’, strotime(‘-1 month’)) arroja “01072014” (esperaba “30062014”).

    –Paul Voss

    5 de agosto de 2014 a las 15:50

Intenta usar el Objeto de fecha y hora:

$date = new DateTime("+2 months");
echo $date->format("d/m/Y");

  • Correcto, pero no relevante para el caso.

    – Stanislav Shabalin

    14 mayo 2012 a las 15:46

  • ¿Por qué esta respuesta no es relevante? Solo curiosidad @StanislavShabalin

    – Muhammad Ibnuh

    8 de agosto de 2017 a las 14:11

  • @MuhammadIbnuh Para ser honesto, no puedo recordar ni descifrarlo cinco años después :–) Tal vez porque ¿por qué usar DateTime cuando ya tienes strtotime y está bien corregir un error tipográfico como en la respuesta aceptada.

    – Stanislav Shabalin

    10 de agosto de 2017 a las 14:54


  • @StanislavShabalin, strtotime no está dando la respuesta adecuada, intente esto, si su fecha actual es el 1 de febrero de 2019, agregue 2 meses e intente … Da el 2 de marzo de 2019. Tiene que ser el 1 de abril de 2019. ¿Hay alguna solución? .? amablemente proporcionar

    – Shurvir Mori

    19 de diciembre de 2019 a las 19:24


Si hoy es “YYYY-mm-31” y el próximo mes no tiene el día 31, se mostrará el próximo mes de ese día, haciendo que el sistema muestre el resultado “+3 meses” en lugar del resultado “+2 meses”.

Así que supongo que esto es lo más seguro:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));

Cambie la fecha al primer día primero.

Usando FechaHora->agregar() o FechaHora->modificar()

Si está trabajando con un objeto DateTime existente, puede usar uno de estos:

// Your date
$date = new DateTime(); // empty for now or pass any date string as param

// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"

// or even easier
$date->modify('+2 months');

// Checking
echo $date->format('Y-m-d');

Tener cuidado de agregar meses en PHP, puede desbordarse al mes siguiente si el día en la fecha original es mayor que el número total de días en el nuevo mes. El mismo desbordamiento ocurre con los años bisiestos al agregar años. De alguna manera, esto no se considera un error por parte de los desarrolladores de PHP y solo está documentado sin una solución. Más aquí: PHP DateTime::modify sumando y restando meses

Descubrí que esta es la solución más precisa para abordar el problema de desbordamiento:

$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');

¿Ha sido útil esta solución?